第4周專案4 建設雙鏈表演算法庫

2021-07-22 22:22:58 字數 3757 閱讀 9257

檔名稱:專案1.cpp 

作    者:王婧

完成日期:2023年9月20日 

版 本 號:v1.0  

問題描述:演算法庫包括兩個檔案: 

標頭檔案:dlinklist.h,包含定義順序表資料結構的**、巨集定義、要實現演算法的函式的宣告; 

原始檔:dlinklist.cpp,包含實現各種演算法的函式的定義 

請採用程式的多檔案組織形式,建立如上的兩個檔案,另外再建立乙個原始檔(如main.cpp),編制main函式,完成相關的測試工作。 

輸入描述:無 

程式輸出:調整後的鍊錶 

cdlinklist.h標頭檔案**

#ifndef cdlinklist_h_included  

#define cdlinklist_h_included

#include #include //迴圈雙鏈表基本運算函式

typedef int elemtype;

typedef struct dnode //定義雙鏈表結點型別

cdlinklist;

void createlistf(cdlinklist *&l,elemtype a,int n); //頭插法建立迴圈雙鏈表

void createlistr(cdlinklist *&l,elemtype a,int n); //尾插法建立迴圈雙鏈表

void initlist(cdlinklist *&l); //初始化迴圈雙鏈表

void destroylist(cdlinklist *&l); //銷毀

bool listempty(cdlinklist *l); //判斷是否為空

int listlength(cdlinklist *l); //求鍊錶長度

void displist(cdlinklist *l); //輸出鍊錶

bool getelem(cdlinklist *l,int i,elemtype &e); //取鍊錶元素

int locateelem(cdlinklist *l,elemtype e); //查詢元素

bool listinsert(cdlinklist *&l,int i,elemtype e); //插入節點

bool listdelete(cdlinklist *&l,int i,elemtype &e); //刪除節點

#endif // cdlinklist_h_included

cdlinklist.h是單鏈表的乙個演算法庫集合,裡面宣告了常用到的各個功能函式。

linklist.cpp檔案**

/迴圈雙鏈表基本運算函式  

#include "cdlinklist.h"

void createlistf(cdlinklist *&l,elemtype a,int n) //頭插法建立迴圈雙鏈表

s=l->next;

while (s->next!=null) //查詢尾結點,由s指向它

s=s->next;

s->next=l; //尾結點next域指向頭結點

l->prior=s; //頭結點的prior域指向尾結點

} void createlistr(cdlinklist *&l,elemtype a,int n) //尾插法建立迴圈雙鏈表

r->next=l; //尾結點next域指向頭結點

l->prior=r; //頭結點的prior域指向尾結點

} void initlist(cdlinklist *&l) //初始化迴圈雙鏈表

void destroylist(cdlinklist *&l) //銷毀

free(p);

} bool listempty(cdlinklist *l) //判斷是否為空

int listlength(cdlinklist *l) //求鍊錶長度

return(i);

} void displist(cdlinklist *l) //輸出鍊錶

printf("\n");

} bool getelem(cdlinklist *l,int i,elemtype &e) //取鍊錶元素

else //i不為1時

if (p==l)

return false;

else

} }

else //雙鏈表為空表時

return 0;

} int locateelem(cdlinklist *l,elemtype e) //查詢元素

if (p==null)

return(0);

else

return(n);

} bool listinsert(cdlinklist *&l,int i,elemtype e) //插入節點

else if (i==1) //原雙鏈表不為空表但i=1時

else

if (p==l) //未找到第i-1個結點

return false;

else //找到第i-1個結點*p

} } bool listdelete(cdlinklist *&l,int i,elemtype &e) //刪除節點

else //i不為1時

if (p==null) //未找到第i-1個結點

return false;

else //找到第i-1個結點*p

} }

else

return false; //原雙鏈表為空表時

}

cdlinklist.cpp對應cdlinklist.h中宣告的各個功能函式,給出了各個功能函式的實現方法。

main.cpp檔案**

#include "cdlinklist.h"  

int main()

; initlist(a);

createlistf(a, a, 10);

printf("length: %d\n", listlength(a));

listinsert(a, 4, 12);

printf("after insert: ");

displist(a);

destroylist(a);

return 0;

}

main.cpp中根據需要新增各個函式,以便實現相應功能。

執行結果:

知識點總結:

定義雙鏈表演算法庫與單鏈表表有很大的相識之處,只是再交換時多了兩個步驟,因為還要進行雙向傳遞。

學習心得:

對雙鏈表交換節點的理解不在紙上多練幾遍是不容易掌握的。

第4周專案4 建立雙鏈表演算法庫

問題及 檔名稱 作 者 路亞麗 完成日期 2016年 9月 22日 版 本 號 v1.0 問題描述 採用程式的多檔案組織形式建立雙鏈表演算法庫 輸入描述 無 程式輸出 dlinklist.h ifndef dlinklist h included define dlinklist h include...

第4周專案4 建立雙鏈表演算法庫

檔名稱 建立雙鏈表演算法庫.cpp 作 者 孟琪琪 完成日期 2016年 9月 23日 並建設自己的專業基礎設施演算法庫 輸入描述 無 輸出描述 輸出插入資料後的逆序 標頭檔案dlinklist.h ifndef dlinklist h included define dlinklist h inc...

第4周 專案2 建設「單鏈表」演算法庫

問題及 1 原始檔 main.cpp,完成測試工作 檔名稱 test.cpp 作 者 焦夢真 完成日期 2015年9月25日 版 本 號 v1.0 問題描述 單鏈表基本操作的實現,建立單鏈表資料儲存結構基本操作的演算法庫 輸入描述 無 程式輸出 輸出設計好的鍊錶 include linklist.h...