C 單鏈表的基本操作及逆序存放

2021-10-10 05:40:32 字數 3776 閱讀 9470

實驗3、單鏈表的基本操作實現

要求:(1)實驗目的

通過該實驗,深入理解鍊錶的邏輯結構、物理結構等概念,掌握鍊錶基本操作的程式設計實現,熟練掌握c語言中指標的操作。和實驗3對比,掌握線性結構兩種不同儲存方式的區別。

(2)實驗內容

程式設計實現鍊錶下教材第二章定義的線性表的基本操作,最好用選單形式對應各個操作,使其程式設計乙個完整的小軟體。注意,每個功能模組一定要考慮非法的情況,並作出相應的提示,例如:求前驅,要分別能夠測試第乙個元素的前驅、其他正常的元素的前驅、輸入乙個在表中不存在的元素求其前驅,這三種情況應給出相應的提示語和結果值;插入和刪除時要考慮插入或刪除的位置是否合法等。

(3)實驗要求:

選單項包括:

1.初始化或重置鍊錶

2.銷毀鍊錶

3.清空鍊錶

4.鍊錶長度

5.指定位置的元素值

6.鍊錶已存在元素的位序

7.求輸入元素的直接前驅

8.求輸入元素的直接後繼

9.在第i個位置插入乙個元素

10.刪除第i個元素

11.輸出有的鍊錶元素

12.初始化並用頭插法(或尾插法)輸入元素

13.實現單鏈表的逆序存放

要求:所有的提示語和輸出語句不允許出現在自定義的函式中,只能在main函式**現提示語。

注:銷毀鍊錶時需要迴圈釋放每個結點所占用的空間。

注:求前驅是指,輸入乙個元素值(而不是位置),求該元素在順序表中的直接前驅元素值。求後繼是指:輸入乙個元素值(而不是位置),求該元素在順序表中的直接後繼元素值。

#include

#include

#include

using

namespace std;

#define error -1;

int exist=0;

//全域性變數來判斷是否初始化.

typedef

int elemtype;

typedef

struct lnodelnode,

*linklist;

//初始化乙個空鍊錶

void

createlist

(linklist &l)

//銷毀鍊錶

void

destroylist

(linklist &l)

free

(pre)

; exist=0;

}//清空鍊錶

void

clearlist

(linklist &l)

l->next=

null;}

//求鍊錶長度

intlistlength

(linklist &l)

//指定位置元素值

intlistfind

(linklist &l,

int pos)

return p-

>data;

}//查詢指定元素位置

void

locateelem

(linklist &l,

int e)

if(p==

null

)else cout<<

"該元素在第"

<"位"<}//指定元素前驅

void

findprior

(linklist &l,

int x)

if(p-

>next)

else cout<<

"沒找到該元素前驅,或該元素不存在!"

<}//.......後驅

void

findnext

(linklist &l,

int y)

if(p-

>next)

else cout<<

"沒找到該元素後驅,或該元素不存在."

<}//插入操作

void

listinsert

(linklist &l,

int posi,

int e)

else

q->next=p;

pre-

>next=q;}}

//刪除操作

void

elemdelete

(linklist &l,

int pos)

else

if(p-

>next)

else}}

//遍歷輸出

void

displist

(linklist &l)

cout<}//頭插法輸入

void

initlist

(linklist &l,

int n)

}//逆序存放

void

reverselist

(linklist &l)

}int

main()

else cout<<

"請先初始化鍊錶!"

;case3:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case4:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case5:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case6:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case7:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case8:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case9:

if(exist==1)

else cout<<

"輸入的位置不存在!請重新輸入!"

<}else cout<<

"請先初始化鍊錶!"

;case10:

if(exist==1)

else cout<<

"輸入的位置不存在!請重新輸入!"

<}else cout<<

"請先初始化鍊錶!"

;case11:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;case12:

cout<<

"輸入要輸入元素的個數:"

;int n;

cin>>n;

cout<<

"輸入元素:"

;initlist

(l,n)

; exist=1;

cout<<

"初始化並輸入元素成功!"

;case13:

if(exist==1)

else cout<<

"請先初始化鍊錶!"

;default

: cout<<

"輸入有誤!請重新輸入."

<}

c 單鏈表基本操作

下午沒事,看資料結構。想到自畢業以後,都沒有寫過這些東西了。寫個鍊錶基本操作,還沒完全測試。includeusing namespace std node 節點 struct node int data node p 單鏈表 class link 通過陣列夠造 link int arr,int le...

C 單鏈表基本操作

include using namespace std struct node class list 建立帶頭結點的鍊錶,head next null 表示鍊錶為空,只有乙個頭結點 void creatlist1 int n 頭插入法建立鍊錶 void creatlist2 int n 尾插入法建立...

C 單鏈表基本操作

鍊錶一直是面試的高頻題,今天先總結一下單鏈表的使用,下節再總結雙向鍊錶的。本文主要有單鏈表的建立 插入 刪除節點等。1 概念 單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 指標,元素就是儲存資料的儲存單元,指標就是...