




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2.頁腳.
1
簡述以下算法的功能:
(1)Status
A(LinkedList
L)
{//L是無表頭結(jié)點(diǎn)的單鏈表
if(L&&L->next){
Q=L;L=L->next;P=L;
While(P->next)P=P->next;
P->next=Q;Q->next=NULL;
}
return
OK;
}//A
(2)void
BB(LNode*s,LNode*q)
{
p=s;
While(p->next!=q)
p=p->next;
p->next=s;
}//BB
Void
AA(LNode*pa,LNode*pb)
{
//pa和pb分別指向單循環(huán)鏈表中的兩個節(jié)點(diǎn)
BB(pa,pb);
BB(pb,pa);
}//AA
2
指出以下算法中的錯誤和低效(既費(fèi)時)之處,并將它改寫為一個即正確又高效的算法。
Status
DeleteK(SqList&a,int
i,int
k){
//本過程從順序存儲結(jié)構(gòu)的線性表a中刪除第i個元素起的K個元素
If
(i<1||k<0||i+k>a.length)
return
INFEASIBLE;
//參數(shù)不合法
else{
for(count=1;count
<k;count++){
//刪除一個元素
For(j=a.length;j>=i+1;j-
-)
a.elem[j-
1]=a.elem[j];
a.length-
-;
}
Return
OK;
}//DeleteK
下列算法設(shè)計題涉及的順序表和線性鏈表的類型定義如下:#defineLIST_INIT_SIZE100#defineLISTINCREMENT10Typedefstruct{數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第1頁。ElemType*elem;//存儲空間基址數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第1頁。intlength;//當(dāng)前的長度intlistsize;//當(dāng)前分配的存儲容量}SqList;//順序表類型TypedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//線性鏈表類型2.11設(shè)順序表va中的數(shù)據(jù)元素遞增有序。試寫一算法,將x插入到順序表的適當(dāng)位置上,以保持該表的有序性。2.13試寫一算法在帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作LOCATE(L,X)。2.14試寫一算法在帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作LENGTH(L)。2.15已知指針ha和hb分別指向兩個單鏈表的頭結(jié)點(diǎn),并且已知兩個鏈表的長度分別為m和n。試寫一算法將這兩個鏈表連接在一起(即令其中一個表的首元結(jié)點(diǎn)連在另一個表的最后一個結(jié)點(diǎn)之后),假設(shè)指針hc指向連接后的鏈表頭結(jié)點(diǎn),并要求算法以盡可能短的時間完成連接運(yùn)算。請分析你的算法的時間復(fù)雜度。2.17試寫一算法,在無頭結(jié)點(diǎn)的動態(tài)單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作INSERT(L,i,b),并和在帶頭結(jié)點(diǎn)的動態(tài)單鏈表上實(shí)現(xiàn)相同操作的算法進(jìn)行比較。2.18試寫一算法,在無頭結(jié)點(diǎn)的動態(tài)單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作DELETE(L,i),并和在帶頭結(jié)點(diǎn)的動態(tài)單鏈表上實(shí)現(xiàn)相同操作的算法進(jìn)行比較。2.19已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一高效算法,刪除表中所有值大于maxk的元素(若表中存在這樣的元素)同時釋放被刪結(jié)點(diǎn)空間,并分析你的算法的時間復(fù)雜度(注意:mink和maxk是給定的兩個參變量,它們的值可以和表中的元素相同,也可以不同)。2.21試寫一算法,實(shí)現(xiàn)順序表的就地逆置,即利用原表的存儲空間將線性表(a1,a2,…,an)逆置為(an,an-1,…,a1)。試寫一算法,對單鏈表實(shí)現(xiàn)就地逆置。參考答案數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第2頁。數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第2頁。StatusDeleteK(SqList&a,inti,intk)//刪除線性表a中第i個元素起的k個元素
{
if(i<1||k<0||i+k-1>a.length)returnINFEASIBLE;
for(count=1;i+count-1<=a.length-k;count++)//注意循環(huán)結(jié)束的條件
a.elem[i+count-1]=a.elem[i+count+k-1];
a.length-=k;
returnOK;
}//DeleteK2.11StatusInsert_SqList(SqList&va,intx)//把x插入遞增有序表va中
{
if(va.length+1>va.listsize)returnERROR;
va.length++;
for(i=va.length-1;va.elem[i]>x&&i>=0;i--)
va.elem[i+1]=va.elem[i];
va.elem[i+1]=x;
returnOK;
}//Insert_SqList2.12intListComp(SqListA,SqListB)//比較字符表A和B,并用返回值表示結(jié)果,值為正,表示A>B;值為負(fù),表示A<B;值為零,表示A=B
{
for(i=1;A.elem[i]||B.elem[i];i++)
if(A.elem[i]!=B.elem[i])returnA.elem[i]-B.elem[i];
return0;
}//ListComp2.13LNode*Locate(LinkListL,intx)//鏈表上的元素查找,返回指針
{
for(p=l->next;p&&p->data!=x;p=p->next);
returnp;
}//Locate2.14數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第3頁。intLength(LinkListL)//求鏈表的長度
{
for(k=0,p=L;p->next;p=p->n數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第3頁。2.15voidListConcat(LinkListha,LinkListhb,LinkList&hc)//把鏈表hb接在ha后面形成鏈表hc
{
hc=ha;p=ha;
while(p->next)p=p->next;
p->next=hb;
}//ListConcat2.16見書后答案.2.17StatusInsert(LinkList&L,inti,intb)//在無頭結(jié)點(diǎn)鏈表L的第i個元素之前插入元素b
{
p=L;q=(LinkList*)malloc(sizeof(LNode));
q.data=b;
if(i==1)
{
q.next=p;L=q;//插入在鏈表頭部
}
else
{
while(--i>1)p=p->next;
q->next=p->next;p->next=q;//插入在第i個元素的位置
}
}//Insert2.18數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第4頁。StatusDelete(LinkList&L,inti)//在無頭結(jié)點(diǎn)鏈表L中刪除第i個元素
{
if(i==1)L=L->next;//刪除第一個元素
else
{
p=L;
while(--i>1)p=p->next;
p->next=p->next->next;//刪除第i個元素數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第4頁。2.19StatusDelete_Between(Linklist&L,intmink,intmaxk)//刪除元素遞增排列的鏈表L中值大于mink且小于maxk的所有元素
{
p=L;
while(p->next->data<=mink)p=p->next;//p是最后一個不大于mink的元素
if(p->next)
//如果還有比mink更大的元素
{
q=p->next;
while(q->data<maxk)q=q->next;//q是第一個不小于maxk的元素
p->next=q;
}
}//Delete_Between2.20StatusDelete_Equal(Linklist&L)//刪除元素遞增排列的鏈表L中所有值相同的元素
{
p=L->next;q=p->next;//p,q指向相鄰兩元素
while(p->next)
{
if(p->data!=q->data)
{
p=p->next;q=p->next;//當(dāng)相鄰兩元素不相等時,p,q都向后推一步
}
else
{
while(q->data==p->data)
{
free(q);
q=q->next;
}
p->next=q;p=q;q=p->next;//當(dāng)相鄰元素相等時刪除多余元素
}//else
}//while
}//Delete_Equal數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第5頁。數(shù)據(jù)結(jié)構(gòu)作業(yè)-線性表2全文共6頁,當(dāng)前為第5頁。voidreverse(SqList&A)//順序表的就地逆置
{
for(i=1,j=A.length;i<j;i++,j--)
A.elem[i]<->A.elem[j];
}//reverse2.22voidLinkList_reverse(Linklist&L)//鏈表的就地逆置;為簡化算法,假設(shè)表長大于2
{
p=L->next;q=p->next
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一個小鎮(zhèn)的傳奇:課件展示
- 班會課件-男生
- 汽車維修工(高級)試題庫+參考答案解析
- 《醫(yī)學(xué)影像學(xué)基本原理與應(yīng)用課件》
- 種子種苗的低溫儲存技術(shù)研究考核試卷
- 四大告訴你如何做報告
- 絕緣制品在工業(yè)控制系統(tǒng)網(wǎng)絡(luò)安全的考核試卷
- 《企業(yè)安全生產(chǎn)文化建設(shè)的實(shí)踐與創(chuàng)新》課件
- 小組班會課件
- 糧油行業(yè)展會營銷與品牌推廣考核試卷
- 2025年入團(tuán)考試知識點(diǎn)概述與試題及答案
- 演出服裝定制合同協(xié)議
- 計劃生育選擇試題及答案
- 法律文化-形考作業(yè)3-國開(ZJ)-參考資料
- 家校共育“心”模式:青少年心理健康教育家長會
- 2025屆東北三省四市高三第二次聯(lián)考英語試卷含答案
- 2025-2030中國振動監(jiān)測系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 《中華茶藝文化》課件
- 統(tǒng)編版二年級語文下冊第七單元綜合提優(yōu)卷(含答案)
- 《詞匯構(gòu)建法:課件中的詞根詞綴解析》
- 華為系統(tǒng)面試題及答案
評論
0/150
提交評論