/*
* 檔名稱:cpp1.
* 作 者:宋昊
* 完成日期:2017 年 9 月 26 日
* 版 本 號:v1.0
*
* 問題描述:設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。
設計乙個演算法insert(ha,hb,i)。其功能是:i=0時,將線性表hb插入到線性表ha的最前面;
當i>0時,將線性表hb插入到線性表ha中第i個節點的後面;
當i大於等於線性表ha的長度時,將線性表hb插入到線性表ha的最後面。
* 輸入描述:無需輸入
* 程式輸出:線性表ha和hb,經過演算法insert後的線性表。
*/
#include #include #include "cdlinklist.h"
void insert(cdlinklist *&ha, cdlinklist *&hb,int i)
if (i==0) //將hb的所有資料結點插入到ha的頭結點和第1個資料結點之間
else if (inext;
while (jnext;
} q=p->next; //q指向*p結點的後繼結點/
p->next=hb->next; //hb->prior指向hb的最後乙個結點
hb->next->prior=p;
hb->prior->next=q;
q->prior=hb->prior;
} else //將hb鏈到ha之後
free(hb); //釋放hb頭結點
}
int main()
; initlist(ha);
createlistf(ha, ha, 10);
elemtype hb= ;
initlist(hb);
createlistf(hb, hb, 5);
printf("ha: ");
displist(ha);
printf("hb: ");
displist(hb);
insert(ha, hb, 0); //將0改為其他值,多次執行程式完成測試
printf("new ha: ");
displist(ha);
destroylist(ha);
return 0;
}
#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
//迴圈雙鏈表基本運算函式
#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 //雙鏈表為空表時
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; //原雙鏈表為空表時
}
運算結果:
知識點總結:
採用程式的多檔案組織形式。除呼叫insert函式外,依然利用演算法庫。
第4周專案5 迴圈雙鏈表應用
檔名稱 專案5.cpp 作 者 陳勝男 完成日期 2015年10月23日 版 本 號 v1.0 問題描述 設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i 0時,將線性表hb插入到 線性表h...
第4周專案5 迴圈雙鏈表應用
問題及 檔名稱 專案5.cbp 作 者 陳光輝 完成日期 2016年9月23日 版 本 號 v1.0 問題描述 設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i 0時,將線性表hb插入到 線...
第4周專案5(2) 迴圈雙鏈表應用
設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i 0時,將線性表hb插入到線性表ha中第i個節點的後面 當i大於等於線性表ha的長度時,將線性表hb插入到線性表ha的最後面。main.cpp...