實驗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 概念 單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 指標,元素就是儲存資料的儲存單元,指標就是...