實驗一 單鏈表的各種基本運算

2021-05-24 14:01:32 字數 3298 閱讀 4972

編寫乙個程式,實現單鏈表的各種基本運算

建立乙個單鏈表,實現單鏈表的初始化,插入、刪除節點等功能,以及確定某一元素在單鏈表中的位置。

(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 輸出...