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

2021-07-05 16:36:17 字數 3430 閱讀 6223

問題:

/*

*檔名稱:專案4.cbp

*作 者:李藝

*完成日期:2023年10月9日

*版 本 號:v1.0

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

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

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

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

*輸入描述:無

*程式輸出:調整後的鍊錶

*/

架構:

#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

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

#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;   //原雙鏈表為空表時

}

#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;

}

執行結果:

學習心得:

定義雙鏈表演算法庫與單鏈表有很多相似的地方,只是交換的時候多了兩步。

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

include include typedef int elemtype typedef struct dnode 定義雙鏈表結點型別 dlinklist void createlistf dlinklist l,elemtype a,int n 頭插法建雙鏈表 void createlistr d...

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

煙台大學計算機與控制工程學院 並建設自己的專業基礎設施演算法庫 輸入描述 無 輸出描述 輸出插入資料後的逆序 標頭檔案dlinklist.h ifndef dlinklist h included define dlinklist h included typedef int elemtype ty...

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

2015,煙台大學計算機控制工程學院 檔名稱 dlinklist.cpp 完成日期 2015年10月12日 問題描述 採用程式的多檔案組織形式,建立雙鏈表演算法庫 問題要求 1 標頭檔案包含定義順序表資料結構的 巨集定義,要實現演算法的函式的宣告 2 原始檔包含實現各種演算法的函式的定義 1 建立標...