一.實驗目的
熟悉線性表的鏈式儲存結構,熟練掌握線性表各種基本操作的實現,培養靈活運用線性表解決實際問題的能力。
二.實驗題目
鍵盤輸入一組元素,建立乙個帶頭結點的單向鍊錶(無序),遍歷單向鍊錶,在單向鍊錶中刪除元素e,然後將單向鍊錶逆置,設計乙個main()函式,分別除錯上述演算法。
對於單向鍊錶的建立可以有兩種方式選擇,一種是從頭結點後面依次插入,一種是從尾結點後面依次插入,可以根據實際需要選擇這兩種方法之一實現。
單向鍊錶的逆置要求不增加新的儲存空間,只是在原來已有鍊錶的基礎上進行逆置,而不是構造乙個新的鍊錶,將元素逆向插入到新的鍊錶實現逆置功能。
三.實現提示
1. 資料的儲存結構選擇鍊錶,鍊錶的每個結點的定義如下。
typedef int elemtype;
typedef struct lnodelnode, *linklist;
2. 線性鍊錶的逆置操作可以參照下圖,本圖給出了乙個結點逆置的過程,至少需要兩個中間指標完成這個工作:
四.思考及選做
1.如何使用順序表實現本實驗提出的要求。
2.比較順序表和單向鍊錶的優缺點。
3.線性鍊錶的逆置如何能拿遞迴演算法實現。
五.實現
#include#include/*
資料結構定義
*/ typedef int elemtype;
typedef struct lnode
lnode, *linklist;
/*建立鍊錶
*/ lnode * creat(lnode *head)
printf("請輸入整數,輸入0結束:\n");
scanf("%d", &(p1->data));
while(p1->data != 0)
else
p1 = (lnode *)malloc(sizeof(lnode));
if(p1 == null)
scanf("%d", &(p1->data));
} p2->next = null;
return head; }
/* 刪除表中第i個元素
*/ lnode * deletelist(lnode *l,int i)
//判斷找的p的位置是否合理
//if(!(p->next)||j>i-1)return -1;
q=p->next;
p->next=q->next;
e=q->data;
printf("刪除的是第%d個元素%d\n",i,e);
free(q);
return p; }
/* 將鍊錶反序。
*/ lnode * reverseorderlist(lnode *head)
p2->next = p1;
p1 = p2;
p2 = p3;
p3 = p3->next;
} p2->next = p1;
p1 = p2;
p4->next->next = null;
p4->next = p1;
return (p4); }
/* 列印輸出鍊錶
*/ void print(lnode *d)
printf("\n"); }
/* main函式
*/ int main()
資料結構 線性表的應用例項
將順序表 a1,a2,a3,an 重新排列為以a1為界的兩部分 a1前面的值均比a1小,後面的值均比a1大 資料型別均具有可比性,都設為整型 include include define maxsize 100 typedef struct 順序表結構 seqlist seqlist init se...
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...