資料結構之自建演算法庫 迴圈雙鏈表

2021-09-23 17:43:39 字數 3102 閱讀 2301

本文針對資料結構基礎系列網路課程(2):線性表中第13課時迴圈鍊錶。

雙鏈表演算法庫演算法庫採用程式的多檔案組織形式,包括兩個檔案:

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

#ifndef cdlinklist_h_included

#define cdlinklist_h_included

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

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

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

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

#include

#include

#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

//雙鏈表為空表時

return0;}

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

return0;

}

資料結構之自建演算法庫 雙鏈表

本文針對資料結構基礎系列網路課程 2 線性表中第12課時雙鏈表。雙鏈表演算法庫演算法庫採用程式的多檔案組織形式,包括兩個檔案 1.標頭檔案 dlinklist.h,包含定義雙鏈表資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef dlinklist h included define dl...

資料結構之自建演算法庫 迴圈單鏈表

按照 0207將演算法變程式 部分建議的方法,建設自己的專業基礎設施演算法庫。雙鏈表演算法庫演算法庫採用程式的多檔案組織形式,包括兩個檔案 1.標頭檔案 clinklist.h,包含定義雙鏈表資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef clinklist h included de...

資料結構之自建演算法庫 順序棧

本文針對資料結構基礎系列網路課程 3 棧和佇列中第3課時棧的順序儲存結構及其基本運算實現。順序棧演算法庫採用程式的多檔案組織形式,包括兩個檔案 1.標頭檔案 sqstack.h,包含定義順序棧資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef sqstack h included defi...