本題要求實現乙個函式,將給定的單鏈表逆轉。
函式介面定義:
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 ...
資料結構演算法題目
從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。幾個演算法題目 請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。幾個演算法題目 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,...