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

2021-12-29 19:39:12 字數 2854 閱讀 9620

按照「0207將演算法變程式」[**]部分建議的方法,建設自己的專業基礎設施演算法庫。

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

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

#ifndef clinklist_h_included

#define clinklist_h_included

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

typedef int elemtype;

typedef struct lnode //定義單鏈表結點型別

clinklist;

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

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

void initlist(clinklist *&l); //初始化鍊錶

void destroylist(clinklist *&l); //銷毀鍊錶

bool listempty(clinklist *l); //判斷鍊錶是否為空

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

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

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

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

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

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

#endif // clinklist_h_included  2.原始檔:clinklist.cpp,包含實現各種演算法的函式的定義

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

#include

#include

#include clinklist.h

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

s=l->next;

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

s=s->next;

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

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

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

}void initlist(clinklist *&l) //初始化鍊錶

void destroylist(clinklist *&l) //銷毀鍊錶

free(p);

}bool listempty(clinklist *l) //判斷鍊錶是否為空

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

return(i);

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

printf();}

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

else //i不為1時

if (p==l)

return false;

else}}

else //單鏈表為空表時

return false;

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

if (p==l)

return(0);

else

return(n);

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

else

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

return false;

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

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

else //i不為1時

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

return false;

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

else

return 0;

}  3.在建立演算法庫過程中,為了完成測試,再同一專案(project)中建立乙個原始檔(如main.cpp),編制main函式,完成相關的測試工作。例:

#include

#include clinklist.h

int main()

; initlist(a);

createlistf(a, a, 10);

printf(length: %d

, listlength(a));

listinsert(a, 4, 12);

printf(after insert: );

displist(a);

destroylist(a);

return 0;

}

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

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

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

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

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

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