第四周專案五

2021-07-22 23:47:47 字數 3869 閱讀 9113

問題及**:

*問題及**

*all right reserved.

*檔名稱:雙鏈表演算法庫2.cpp

*完成日期;2023年9月22日

*版本號;v1.0

* *問題描述:  設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert(ha,hb,i)。

其功能是:i=0時,將線性表hb插入到線性表ha的最前面;當i>0時,

將線性表hb插入到線性表ha中第i個節點的後面;當i大於等於線性表ha的長度時,將線性表hb插入到線性表ha的最後面。

請在實現演算法時,除專案中給出的特殊要求,其餘工作均可利用專案4完成的演算法支援。

*輸入描述:無

*程式輸出:兩列數字的逆序輸出

兩列數字合在一起的輸出

*/#include#include"cdlinklist.h"

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;

}#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); //刪除節點

void insert(cdlinklist *&ha, cdlinklist *&hb,int i);

#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頭結點

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

}

執行結果:

知識點總結:

此程式是逆序輸出,先將第一列數字逆序排列輸出,再將第二列數字逆序排列輸出,最後是建立新的鍊錶,將逆序後的第二個鍊錶加到逆序後的第乙個鍊錶之前。

學習心得:

一定要認真學每乙個知識點

第四周專案五(2)

問題及 all right reserved.檔名稱 雙鏈表演算法庫2.cpp 完成日期 2015年9月22日 版本號 v1.0 問題描述 設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i ...

第四周專案二

檔名稱 array.cpp 作 者 李中意 完成日期 2014 年 3月 19 日 版本號 v1.0 輸入描述 無 include includeusing namespace std class void setb double y void setc double z double geta v...

第四周專案二

01.02.程式的版權和版本宣告部分 05.檔名稱 score.cpp 06.作 者 07.完成日期 2014年 3 月 25 日 08.版本號 v1.0 09.輸入描述 已經在程式中初始化 10.問題描述 11.輸出 12.include includeusing namespace std cl...