版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
千里之行,始于足下讓知識(shí)帶有溫度。第第2頁/共2頁精品文檔推薦數(shù)據(jù)結(jié)構(gòu)經(jīng)典算法試題1.假設(shè)有兩個(gè)按元素值遞增次序羅列的線性表,均以單鏈表形式存儲(chǔ)。請(qǐng)編寫算法將這兩個(gè)單鏈表歸并為一個(gè)按元素值遞減次序羅列的單鏈表,并要求利用本來兩個(gè)單鏈表的結(jié)點(diǎn)存放歸并后的單鏈表?!颈本└咝?998三、1(5分)】
LinkedListUnion(LinkedListla,lb)
{pa=la->next;pb=lb->next;
la->next=null;
while(pa!=null
pa->next=la->next;∥將pa結(jié)點(diǎn)鏈于結(jié)果表中,同時(shí)逆置。
la->next=pa;
pa=r;
}
else
{r=pb->next;
pb->next=la->next;∥將pb結(jié)點(diǎn)鏈于結(jié)果表中,同時(shí)逆置。
la->next=pb;
pb=r;
}
while(pa!=null)∥將la表的剩余部分鏈入結(jié)果表,并逆置。
{r=pa->next;pa->next=la->next;la->next=pa;pa=r;}
while(pb!=null)
{r=pb->next;pb->next=la->next;la->next=pb;pb=r;}
}
1)設(shè)有兩個(gè)無頭結(jié)點(diǎn)的單鏈表,頭指針分離為ha,hb,鏈中有數(shù)據(jù)域data,鏈域next,兩鏈表的數(shù)據(jù)都按遞增序存放,現(xiàn)要求將hb表歸到ha表中,且歸并后ha仍遞增序,歸并中ha表中已有的數(shù)據(jù)若hb中也有,則hb中的數(shù)據(jù)不歸并到ha中,hb的鏈表在算法中不允許破壞?!灸暇├砉じ咝?997四、3(15分)】
LinkedListUnion(LinkedListha,hb)∥ha和hb是兩個(gè)無頭結(jié)點(diǎn)的數(shù)據(jù)域值遞增有序的單鏈
{LinkedList表,本算法將hb中并不浮現(xiàn)在ha中的數(shù)據(jù)合并到ha中,合并中不能破壞hb鏈表。
la;
la=(LinkedList)malloc(sizeof(LNode));
la->next=ha;
pa=ha;
pb=hb;
pre=la;
while(papre=pa;pa=pa->next;}
elseif(pa->data>pb->data)∥處理hb中數(shù)據(jù)。
{r=(LinkedList)malloc(sizeof(LNode));
r->data=pb->data;pre->next=r;
pre=r;
pb=pb->next;}
Else∥處理pa->data=pb->data;
{pre->next=pa;pre=pa;
pa=pa->next;∥兩結(jié)點(diǎn)數(shù)據(jù)相等時(shí),只將ha的數(shù)據(jù)鏈入。
pb=pb->next;
}
if(pa!=null)pre->next=pa;∥將兩鏈表中剩余部分鏈入結(jié)果鏈表。
elsepre->next=pb;
free(la);
}
2)已知頭指針分離為la和lb的帶頭結(jié)點(diǎn)的單鏈表中,結(jié)點(diǎn)按元素值非遞減有序羅列。寫出將la和lb兩鏈表歸并成一個(gè)結(jié)點(diǎn)按元素值非遞減有序羅列的單鏈表(其頭指針為lc),并計(jì)算算法的時(shí)光復(fù)雜度?!狙嗌礁咝?998五(20分)】
pa=la->next;pb=hb->next;
lc=(LinkedList)malloc(sizeof(LNode));
pc=lc;∥pc是結(jié)果鏈表中當(dāng)前結(jié)點(diǎn)的前驅(qū)
while(papc=pa;pa=pa->next;}
else{pc->next=pb;pc=pb;pb=pb->next;}
if(pa)pc->next=pa;elsepc->next=pb;
free(la);free(lb);∥釋放本來兩鏈表的頭結(jié)點(diǎn)。
2.設(shè)帶頭結(jié)點(diǎn)且頭指針為ha和hb的兩線性表A和B分離表示兩個(gè)集合。兩表中的元素皆為遞增有序。請(qǐng)寫一算法求A和B的并集AUB。要求該并集中的元素仍保持遞增有序。且要利用A和B的原有結(jié)點(diǎn)空間?!颈本┼]電高校1992二(15分)】
LinkedListUnion(LinkedListha,hb)
{pa=ha->next;pb=hb->next;∥設(shè)工作指針pa和pb。
pc=ha;∥pc為結(jié)果鏈表當(dāng)前結(jié)點(diǎn)的前驅(qū)指針。
while(papc=pa;pa=pa->next;}
elseif(pa->data>pb->data)
{pc->next=pb;pc=pb;pb=pb->next;}
Else{pc->next=pa;pc=pa;pa=pa->next;∥處理pa->data=pb->data.
u=pb;pb=pb->next;free(u);}
if(pa)pc->next=pa;∥若ha表未空,則鏈入結(jié)果表。
elsepc->next=pb;∥若hb表未空,則鏈入結(jié)果表。
free(hb);return(ha);
}
1)已知遞增有序的兩個(gè)單鏈表A,B分離存儲(chǔ)了一個(gè)集合。設(shè)計(jì)算法實(shí)現(xiàn)求兩個(gè)集合的并集的運(yùn)算A:=A∪B【合肥工業(yè)高校1999五、1(8分)】解答徹低同上2
2)已知兩個(gè)鏈表A和B分離表示兩個(gè)集合,其元素遞增羅列。編一函數(shù),求A與B的交集,并存放于A鏈表中。【南京航空航天高校2022六(10分)】
pa=la->next;pb=lb->next;
pc=la;∥結(jié)果表中當(dāng)前合并結(jié)點(diǎn)的前驅(qū)的指針。
while(papc=pa;pa=pa->next;u=pb;pb=pb->next;free(u);}
elseif(pa->datadata){u=pa;pa=pa->next;free(u);}
else{u=pb;pb=pb->next;free(u);}
while(pa){u=pa;pa=pa->next;free(u);}
while(pb){u=pb;pb=pb->next;free(u);}
pc->next=null;
free(lb);∥注:本算法中也可對(duì)B表不作釋放空間的處理
3)設(shè)有兩個(gè)從小到大排序的帶頭結(jié)點(diǎn)的有序鏈表。試編寫求這兩個(gè)鏈表交運(yùn)算的算法(即L1∩L2)。要求結(jié)果鏈表仍是從小到大排序,但無重復(fù)元素。【南京航空航天高校(10分)】pa=L1->next;pb=L2->next;∥pa、pb是兩鏈表的工作指針。
pc=L1;∥L1作結(jié)果鏈表的頭指針。
while(papa=pa->next;free(u);}∥刪除L1表多余元素
elseif(pa->data>pb->data)pb=pb->next;∥pb指針后移
else∥處理交集元素
{if(pc==L1){pc->next=pa;pc=pa;pa=pa->next;}∥處理第一個(gè)相等的元素。
elseif(pc->data==pa->data){u=pa;pa=pa->next;free(u);}∥重復(fù)元素不進(jìn)入L1表。
else{pc->next=pa;pc=pa;pa=pa->next;}∥交集元素并入結(jié)果表。
}∥while
while(pa){u=pa;pa=pa->next;free(u);}∥刪L1表剩余元素
pc->next=null;∥置結(jié)果鏈表尾
5)已知遞增有序的單鏈表A,B和C分離存儲(chǔ)了一個(gè)集合,設(shè)計(jì)算法實(shí)現(xiàn)A:=A∪(B∩C),并使求解結(jié)構(gòu)A仍保持遞增。要求算法的時(shí)光復(fù)雜度為O(|A|+|B|+|C|)。其中,|A|為集合A的元素個(gè)數(shù)?!竞戏使I(yè)高校2000五、1(8分)】
LinkedListunion(LinkedListA,B,C)
{pa=A->next;pb=B->next;pc=C->next;∥設(shè)置三個(gè)工作指針。
pre=A;∥pre指向結(jié)果鏈表中當(dāng)前待合并結(jié)點(diǎn)的前驅(qū)。
if(pa->datadata||pa->datadata)∥A中第一個(gè)元素為結(jié)果表的第一元素。
{pre->next=pa;pre=pa;pa=pa->next;}
else{while(pb
elseif(pb->data>pc->data)pc=pc->next;
elsebreak;∥找到B表和C表的共同元素就退出while循環(huán)。
if(pbpre=pb;pb=pb->next;pc=pc->next;}∥B,C公共元素為結(jié)果表第一元素。
}∥結(jié)束了結(jié)果表中第一元素確實(shí)定
while(pa
elseif(pb->data>pc->data)pc=pc->next;
elsebreak;∥B表和C表有公共元素。
if(pbpre=pa;pa=pa->next;}
if(pre->data!=pb->data){pre->next=pb;pre=pb;pb=pb->next;pc=pc->next;}
else{pb=pb->next;pc=pc->next;}∥若A中已有B,C公共元素,則不再存入結(jié)果表。
}
}∥while(pa∥當(dāng)B,C無公共元素(即一個(gè)表已空),將A中剩余鏈入。
}
3.知L1、L2分離為兩循環(huán)單鏈表的頭結(jié)點(diǎn)指針,m,n分離為L1、L2表中數(shù)據(jù)結(jié)點(diǎn)個(gè)數(shù)。要求設(shè)計(jì)一算法,用最迅速度將兩表合并成一個(gè)帶頭結(jié)點(diǎn)的循環(huán)單鏈表?!緰|北高校1996二(12分)】
LinkedListUnion(LinkedListL1,L2;intm,n)
∥L1和L2分離是兩循環(huán)單鏈表的頭結(jié)點(diǎn)的指針,m和n分離是L1和L2的長度。
∥本算法用最迅速度將L1和L2合并成一個(gè)循環(huán)單鏈表。
{if(mnext!=L1)p=p->next;∥查最后一個(gè)元素結(jié)點(diǎn)。
p->next=L2->next;∥將L1循環(huán)單鏈表的元素結(jié)點(diǎn)插入到L2的第一元素結(jié)點(diǎn)前。
L2->next=L1->next;
free(L1);∥釋放無用頭結(jié)點(diǎn)。
}
}∥處理完mnext!=L2)p=p->next;∥查最后元素結(jié)點(diǎn)。
p->next=L1->next;∥將L2的元素結(jié)點(diǎn)插入到L1循環(huán)單鏈表的第一元素結(jié)點(diǎn)前。
L1->next=L2->next;
free(L2);∥釋放無用頭結(jié)點(diǎn)。
}
}
1)試用類Pascal語言編寫過程PROCjoin(VARla:link;lb:link)實(shí)現(xiàn)銜接線性表la和lb(lb在后)的算法,要求其時(shí)光復(fù)雜度為0(1),占用輔助空間盡量小。描述所用結(jié)構(gòu)?!颈本┕I(yè)高校1997一、1(8分)】
LinkedListUnion(LinkedListla,lb)
∥la和lb是兩個(gè)無頭結(jié)點(diǎn)的循環(huán)單鏈表的尾指針,本算法將lb接在la后,成為一個(gè)單循環(huán)鏈表。
{q=la->next;∥q指向la的第一個(gè)元素結(jié)點(diǎn)。
la->next=lb->next;∥將lb的最后元素結(jié)點(diǎn)接到lb的第一元素。
lb->next=q;∥將lb指向la的第一元素結(jié)點(diǎn),實(shí)現(xiàn)了lb接在la后。
return(lb);∥返回結(jié)果單循環(huán)鏈表的尾指針lb。
}
2)設(shè)有兩個(gè)鏈表,ha為單向鏈表,hb為單向循環(huán)鏈表。編寫算法,將兩個(gè)鏈表合并成一個(gè)單向鏈表,要求算法所需時(shí)光與鏈表長度無關(guān)。【南京航空航天高校1997四(8分)】
若循環(huán)單鏈表帶有頭結(jié)點(diǎn),則相應(yīng)算法片段如下:
q=lb->next;∥q指向lb的頭結(jié)點(diǎn);
lb->next=la->next;∥lb的后繼結(jié)點(diǎn)為la的頭結(jié)點(diǎn)。
la->next=q->next;∥la的后繼結(jié)點(diǎn)為lb的第一元素結(jié)點(diǎn)。
free(q);∥釋放lb的頭結(jié)點(diǎn)
return(lb);∥返回結(jié)果單循環(huán)鏈表的尾指針lb。
其核心算法片段如下(設(shè)兩鏈表均有頭結(jié)點(diǎn))
q=hb->next;∥單向循環(huán)鏈表的表頭指針
hb->next=ha->next;∥將循環(huán)單鏈表最后元素結(jié)點(diǎn)接在ha第一元素前。
ha->next=q->next;∥將指向原單鏈表第一元素的指針指向循環(huán)單鏈表第一結(jié)點(diǎn)
free(q);∥釋放循環(huán)鏈表頭結(jié)點(diǎn)。
若兩鏈表均不帶頭結(jié)點(diǎn),則算法片段如下:
q=hb->next;∥q指向hb首元結(jié)點(diǎn)。
hb->next=ha;∥hb尾結(jié)點(diǎn)的后繼是ha第一元素結(jié)點(diǎn)。
ha=q;∥頭指針指向hb
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年汽車電子元件研發(fā)與全球銷售合作協(xié)議3篇
- 2024年版國內(nèi)公路貨物承運(yùn)協(xié)議樣式版
- 2024年電商合作市場營銷策略協(xié)議
- 松鼠北師版課程設(shè)計(jì)
- 2024年網(wǎng)絡(luò)云服務(wù)合同:云計(jì)算平臺(tái)服務(wù)具體條款
- 2024年度國際項(xiàng)目外籍專家聘用合同規(guī)范3篇
- 水資源課程設(shè)計(jì)教學(xué)大綱
- 2024年版區(qū)塊鏈應(yīng)用平臺(tái)建設(shè)合同
- 2024學(xué)校股權(quán)收購及教育資源共享合作協(xié)議
- 游學(xué)夏令營課程設(shè)計(jì)
- 玻璃幕墻施工方案幕墻
- 抗精神疾病藥物與麻醉課件
- 部編版語文一年級(jí)上冊 期末復(fù)習(xí)課件
- 脛腓骨骨折的護(hù)理查房
- 區(qū)域經(jīng)理崗位職責(zé)
- 軍事理論論述題大全
- (完整word版)中國戶口本英文翻譯模板
- 大學(xué)生安全教育智慧樹知到答案章節(jié)測試2023年中國海洋大學(xué)
- 酒店安全管理制度
- GB/T 41693-2022高關(guān)注化學(xué)物質(zhì)評(píng)估判定導(dǎo)則
- YY/T 0698.7-2009最終滅菌醫(yī)療器械包裝材料第7部分:環(huán)氧乙烷或輻射滅菌無菌屏障系統(tǒng)生產(chǎn)用可密封涂膠紙要求和試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論