資料結構 線性表的應用

2021-06-08 18:11:47 字數 1803 閱讀 3927

一.實驗目的

熟悉線性表的鏈式儲存結構,熟練掌握線性表各種基本操作的實現,培養靈活運用線性表解決實際問題的能力。

二.實驗題目

鍵盤輸入一組元素,建立乙個帶頭結點的單向鍊錶(無序),遍歷單向鍊錶,在單向鍊錶中刪除元素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...