編寫乙個程式,實現單鏈表的各種基本運算
建立乙個單鏈表,實現單鏈表的初始化,插入、刪除節點等功能,以及確定某一元素在單鏈表中的位置。
(1)初始化單鏈表;
(2)依次採用尾插入法插入a,b,c,d,e元素;
(3)輸出單鏈表l;
(4)輸出單鏈表l的長度;
(5)判斷單鏈表l是否為空;
(6)輸出單鏈表l的第三個元素;
(7)輸出元素a的位置;
(8)在第4個元素位置上插入f元素;
(9)輸出單鏈表l;
(10)刪除l的第3個元素;
(11)輸出單鏈表l;
(12)釋放單鏈表。
(1)為了實現上述程式功能,需要定義乙個簡化的線性表抽象資料型別:
adt linearlist
結構關係:r=
基本操作:
initlist_l(l)
操作前提:l是乙個未初始化的線性表
操作結果:將l初始化為乙個空的線性表
createlist_l(l)
操作前提:l是乙個已初始化的空表
操作結果:建立乙個非空的線性表l
listinsert_l(l,pos,e)
操作前提:線性表l已存在
操作結果:將元素e插入到線性表l的pos位置
listdelete_l(l,pos,e)
操作前提:線性表l已存在
操作結果:將線性表l中pos位置的元素刪除,
刪除的元素值通過e返回
locatelist_l(l,e)
操作前提:線性表l已存在
若存在,返回元素在表中的序號位置;
若不存在,返回-1
destroylist_l(&l)
初始條件:線性表l已存在
操作結果:銷毀線性表
listempty_l(l)
初始條件:線性表已存在
操作結果:若l為空表,則返回error,否則返回false
listlength_l(l)
初始條件:線性表l已存在
操作結果:返回l中資料元素個數
getelem_l(l,i,&e)
初始條件:線性表l已存在
操作結果:用e返回l中第i個資料元素值 }
(2)本程式包含10個函式:
ÿ
主函式main()
ÿ
初始化單鏈表函式initlist_l()
ÿ
顯示單鏈表內容函式displist_l()
ÿ
插入元素函式listinsert_l()
ÿ
刪除元素函式listdelete_l()
ÿ
查詢元素函式locatelist_l()
ÿ
建立鍊錶函式createlist_l()
ÿ
鍊錶元素長度函式listlength_l()
ÿ
判斷鍊錶是否為空函式listempty_l()
ÿ
取值函式getelem_l()
各函式間呼叫關係如下:
( 3 )主函式的偽碼
main()
採用單鏈表實現概要設計中定義的抽象資料型別,有關的資料型別和偽碼演算法定義如下:
(1)型別定義
typedef int elemtype;
typedef struct lnode
lnode,* linklist;
(2)基本操作的偽碼演算法
l
初始化bool initlinklist(linklist *l)
l
建立單鏈表
bool crtlinklist(linklist l)
/* l是已經初始化好的空鍊錶的頭指標,通過鍵盤輸入元素值,
利用尾插法建單鏈表l */
rear->next=null;
返回成功標誌; }
l顯示單鏈表(輸出)
void displinklist(linklist l)
}
l
插入操作
bool inslinklist(linklist l, int pos, elemtype e)
/*在帶頭結點的單鏈表l中第pos個位置插入值為e的新結點s*/
else
} l
刪除操作
bool dellinklist(linklist l, int pos, elemtype *e)
/* 在帶頭結點的單鏈表l中刪除第pos個元素,並將刪除的元素儲存到變數*e中*/
else
} l
查詢操作
int loclinklist(linklist l, elemtype e)
/ * 在帶頭結點的單鏈表l中查詢其結點值等於e的結點,
若找到則返回該結點的序號位置k,否則返回-1 * /
else break;
if ( p 不空) return k;
else return -1; }
開始執行時會出現debug error,damage: after normal block, 搜尋後了解到是記憶體越界操作,檢查後發現記憶體分配l和s=(linklist)malloc(sizeof(lnode))寫成了=(linklist)malloc(sizeof(linklist)),修改後正常。
程式執行後,介面直接輸出要求的結果
單鏈表的各種基本運算
輸入 實驗題2 2 include includetypedef char elemtype typedef struct lnode linklist 使用頭插法 void createlistf linklist l,elemtype a,int n 使用尾插法 void createlistr...
單鏈表各種基本運算的演算法
include includetypedef char elemtype typedef struct lnode linknode 宣告單鏈表節點型別 void createlistf linknode l,elemtype a,int n 頭插法建立單鏈表 void createlistr li...
實現迴圈單鏈表各種基本運算的演算法
實驗題目 實現迴圈單鏈表各種基本運算的演算法 實驗內容 編寫乙個程式實現迴圈單鏈表的各種基本運算,並在此基礎上設計乙個主程式 完成如下功能 1 初始化迴圈單鏈表h 2 依次採用尾部插入法插入a,b,c,d,e元素 3 輸出迴圈單鏈表h 4 輸出迴圈單鏈表h長度 5 判斷迴圈單鏈表h是否為空 6 輸出...