/*
*all right resvered .
*檔名稱: 雙鏈表的自建演算法庫.cpp
*作 者: 鄭兆涵
*線性表(三)——雙鏈表的自建演算法庫
*/
問題:建立雙鏈表的自建演算法庫
①標頭檔案:dlinklist.h,包含定義雙鏈表資料結構的**、巨集定義、要實現演算法的函式的宣告
②原始檔:linklist.cpp,包含實現各種演算法的函式的定義
程式設計**:
//標頭檔案:dlinklist.h,包含定義雙鏈表資料結構的**、巨集定義、要實現演算法的函式的宣告
#ifndef dlinklist_h_included
#define dlinklist_h_included
typedef int elemtype;
typedef struct dnode //定義雙鏈表結點型別
dlinklist;
void createlistf(dlinklist *&l,elemtype a,int n);//頭插法建雙鏈表
void createlistr(dlinklist *&l,elemtype a,int n);//尾插法建雙鏈表
void initlist(dlinklist *&l); //初始化雙鏈表
void destroylist(dlinklist *&l); //銷毀雙鏈表
bool listempty(dlinklist *l); //判斷鍊錶是否為空
int listlength(dlinklist *l); //求鍊錶的長度
void displist(dlinklist *l); //輸出鍊錶
bool getelem(dlinklist *l,int i,elemtype &e); //獲取節點的值
int locateelem(dlinklist *l,elemtype e); //查詢乙個節點
bool listinsert(dlinklist *&l,int i,elemtype e) ;//插入乙個節點
bool listdelete(dlinklist *&l,int i,elemtype &e); //刪除乙個節點
#endif // dlinklist_h_included
//原始檔:linklist.cpp,包含實現各種演算法的函式的定義
#include #include #include "dlinklist.h"
void createlistf(dlinklist *&l,elemtype a,int n)
//頭插法建雙鏈表
}void createlistr(dlinklist *&l,elemtype a,int n)
//尾插法建雙鏈表
r->next=null; //終端結點next域置為null
}void initlist(dlinklist *&l)
void destroylist(dlinklist *&l)
free(p);
}bool listempty(dlinklist *l)
int listlength(dlinklist *l)
return(i);
}void displist(dlinklist *l)
printf("\n");
}bool getelem(dlinklist *l,int i,elemtype &e)
if (p==null)
return false;
else
}int locateelem(dlinklist *l,elemtype e)
if (p==null)
return(0);
else
return(n);
}bool listinsert(dlinklist *&l,int i,elemtype e)
if (p==null) //未找到第i-1個結點
return false;
else //找到第i-1個結點*p
}bool listdelete(dlinklist *&l,int i,elemtype &e)
if (p==null) //未找到第i-1個結點
return false;
else //找到第i-1個結點*p
}//編制main函式,完成相關的測試工作
#include #include "dlinklist.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;
}
輸出結果:
線性表 雙鏈表
雙鏈表也是線性表的一種,它的全稱是 線性雙向鏈結表,它有以下特點 在每個節點中除包含有數值域外,設定有兩個指標域,分別用以指向其前驅節點和後繼節點。既可以依次向後訪問每乙個節點,也可以依次向前訪問每乙個節點。dlinklist.h如下 include include typedef int elem...
線性表 雙鏈表
雙鏈表的結點結構 空的雙向鍊錶 處理原則 先在正向鍊錶上插入,再在逆向鍊錶上插入 q rlink p rlink p rlink q q llink p q rlink llink q 在表尾進行插入時 q rlink p rlink p rlink q q llink p if q rlink q...
線性表3 雙鏈表
雙鏈表的每個節點包含三個部分 該節點的資料域,節點的直接前驅,節點的直接後繼。插入 不管是在節點p前插入新節點s,還是在p節點後插入節點s,這裡有個比較容易記和理解的地方 不管是哪種操作,都後處理p.prior和p.next就對了。解釋下,如果在p之前插入節點s,首先要做的部分是s.prior p....