資料結構拓展題目

2021-09-28 11:05:02 字數 3465 閱讀 7401

本題要求實現乙個函式,將給定的單鏈表逆轉。

函式介面定義:

list reverse( list l );
其中list結構定義如下:

typedef struct node *ptrtonode;

struct node ;

typedef ptrtonode list; /* 定義單鏈表型別 */

l是給定單鏈表,函式reverse要返回被逆轉後的鍊錶。

裁判測試程式樣例:

#include #include typedef int elementtype;

typedef struct node *ptrtonode;

struct node ;

typedef ptrtonode list;

list read(); /* 細節在此不表 */

void print( list l ); /* 細節在此不表 */

list reverse( list l );

int main()

/* 你的**將被嵌在這裡 */

輸入樣例:

5

1 3 4 5 2

輸出樣例:

1

2 5 4 3 1

**實現:

list reverse( list l )

return l;

}

解釋:

將原表儲存為p表,原表l賦空。遍歷單鏈表,只要p不為空,就用q記錄下來當前位置,然後p指標後移。先把值為null的l賦值給q->next,那麼第乙個q之鄉的位置所指向的next值是null,然後把q賦值給l,那麼這個鍊錶的頭指標就是l。

以此類推,就是q->next一直放到l前邊,然後用l = q把頭指標交換回來。

本題要求實現順序表的操作集。

函式介面定義:

list makeempty(); 

position find( list l, elementtype x );

bool insert( list l, elementtype x, position p );

bool delete( list l, position p );

其中list結構定義如下:

typedef int position;

typedef struct lnode *list;

struct lnode ;

各個操作函式的定義為:

list makeempty():建立並返回乙個空的線性表;

position find( list l, elementtype x ):返回線性表中x的位置。若找不到則返回error;

bool insert( list l, elementtype x, position p ):將x插入在位置p並返回true。若空間已滿,則列印「full」並返回false;如果引數p指向非法位置,則列印「illegal position」並返回false;

bool delete( list l, position p ):將位置p的元素刪除並返回true。若引數p指向非法位置,則列印「position p empty」(其中p是引數值)並返回false。

裁判測試程式樣例:

#include #include #define maxsize 5

#define error -1

typedef enum bool;

typedef int elementtype;

typedef int position;

typedef struct lnode *list;

struct lnode ;

list makeempty();

position find( list l, elementtype x );

bool insert( list l, elementtype x, position p );

bool delete( list l, position p );

int main()

scanf("%d", &n);

while ( n-- )

scanf("%d", &n);

while ( n-- )

return 0;

}/* 你的**將被嵌在這裡 */

輸入樣例:

6

1 2 3 4 5 6

36 5 1

2-1 6

輸出樣例:

full insertion error: 6 is not in.

finding error: 6 is not in.

5 is at position 0.

1 is at position 4.

position -1 empty deletion error.

full insertion error: 0 is not in.

position 6 empty deletion error.

full insertion error: 0 is not in.

**實現:

//建立並返回乙個空的線性表

list makeempty()

//返回線性表中x的位置。若找不到則返回error

position find( list l, elementtype x )

}if (!flag) return error;

}//將x插入在位置p並返回true。若空間已滿,則列印「full」並返回false;如果引數p指向非法位置,則列印「illegal position」並返回false

bool insert( list l, elementtype x, position p )

if (p > l->last+1 || p < 0) //p插入的位置可以是last位置,但是不能是last的下一位

int i;

for (i=l->last+1;i>p;i--)

l->data[i] = l->data[i-1];

l->data[i] = x;

l->last++;

return true;

}//將位置p的元素刪除並返回true。若引數p指向非法位置,則列印「position p empty」(其中p是引數值)並返回false。

bool delete( list l, position p )

int i;

for (i=p;ilast;i++)

l->data[i] = l->data[i+1];

l->last--;

return true;

}

資料結構實驗題目

1 集合的交 並 差運算 容易 問題描述 編制乙個能演示執行集合的交 並和差運算的程式。集合元素用小寫英文本母。基本要求 1 用線性表來儲存集合 2 分別實現交 並和差這三個集合運算 3 輸出結果 2成績統計 中等 問題描述 給出n個學生的m門考試的成績表,每個學生的資訊由學號 姓名以及各科成績組成...

資料結構題目記錄

有兩個稀疏矩陣a,b,規格分別是m n,n k 現在要求編寫乙個函式,來計算c a b,並且a,b.c矩陣皆由三元組儲存。函式程式段 先將兩個三元組轉換成矩陣,然後計算兩個矩陣的乘積,然後再轉化成三元組 void trimatmultiply int a 3 int b 3 int c 3 int ...

資料結構演算法題目

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。幾個演算法題目 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。幾個演算法題目 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,...