數(shù)據(jù)結構編程填空題_第1頁
數(shù)據(jù)結構編程填空題_第2頁
數(shù)據(jù)結構編程填空題_第3頁
數(shù)據(jù)結構編程填空題_第4頁
數(shù)據(jù)結構編程填空題_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

ElemTypeMaxValue(LNode*{if(HL==NULL)cerr<<“ListisEmpty!”<<endl;}ElemTypemax=HL-for(HL=HL->next;HL;HL=HL->next){if(max<HL->data)max=HL->data;}return}建立一個順序的線性表,并實現(xiàn)線性表的就地逆置,并打印測試逆置前后的線性表ElemTypelist[6]{1,3,5,7,9,6};LNode*HL=newLNode;//表頭inti;LNodefor(i=0,tmp=HL;i<6;i++) //建立鏈式線性tmp->data=list[i];tmp->next=NULL;cout<<''<<tmp->data;if(i<5) tmp->next=newLNode;tmp=tmp->next;}}LNode*cur=HL,*pre=NULL;//就地逆置 tmp=cur->next;cur->next=pre;pre=cur;cur=}while(pre)cout<<''<<pre->data;表的首元結點連接在另一個表的最后一個結點之后,hc指向后的單鏈表LNode*cat_link(LNode*la,LNode*lb)//la是halb是 函數(shù)返回新單鏈表頭結點地址返回{if(la&&lb){LNode*lc=la;while(la->next)la=la->next;la->next=lb;return}elsereturnla?la:}voidre_L(LNode*L){LNode*t=L->right,*w=L->left,*s;intv=0;while(t!=w){if(v%2==0){t=t->rights->left->right=tw->right->left=s;}elset=t-}}遞增有序表以單鏈表作為結構,刪除表中所有值大于mink且小于mark的元素voiddel_min_max(LNode*L,Elemtypemink,Elemtype{LNode*p,*u,*q;intv=0;if(p->data>mink&&p->data<mark){delete}{}}LinkListmynote(LinkList{//L是不結點的單鏈表的頭指針 while(p->next)p=p->next; return把原來的表頭移動到表尾(將第一個結點到鏈表的尾部,作為新的尾結點設鏈表表示的線性表為(a1,a2,…,an),寫出算法執(zhí)行后的返回值所表示的線性表。遞增有序表A和B以單鏈表作為結構,編寫算法將A表和B表中原有結點歸并成一個按照元素值非遞增C。例如A=(1,2,3,4,6),B=(2,3,5,7,9C=(9,7,6,5,4,3,3,2,2,1)。//la是(1,2,3,4,6)lb是 LNode*ABC(LNode*la,LNode{LNode*tmp,*pre=NULL;While(la&&lb){tmp=newLNodeif(la->data<=lb->data tmp->data=la->data;tmp->next=pre;pre=la=la-}elsetmp->data=lb->data;tmp->next=pre;pre=lb=lb-}}While(la)tmp=newtmp->data=la->data;tmp->next=pre;pre=la=la-}While(lb)tmp=newtmp->data=lb->data;tmp->next=pre;pre=lb=lb-}return}la1,2,3,4,6)lb(2,3,5,7,9)LNode*ABC(LNode*la,LNode{LNode*tmp,*pre=NULL;While(la&&lb){if(la->data<=lb->data tmp=la->next;la->next=pre;pre=la;la=}elsetmp=lb->next;lb->next=pre;pre=lb;lb=}}While(la)tmp=la->next;la->next=pre;pre=la;la=}{tmp=lb->next;lb->next=pre;pre=lb;lb=}return}LNode{

new(LNode*la,LNodeLNode*tmp,*New=newLNode;tmp=New;While(la&&lb)if(la->data<=lb->data){tmp->data=la->data;la=la->next;}elsetmp->data=lb->data;lb=lb->next;}if((la&&lb)||la||lb) tmp->next=newLNode;tmp=tmp-}elsetmp->next=}While(la)tmp->data=la->data;la=la->next;if(la tmp->next=newLNode;tmp=tmp->next}elsetmp->next=}While(lb)tmp->data=lb->data;lb=lb->next;if(lb tmp->next=newLNode;tmp=tmp->next}elsetmp->next=}return}LNode*{

new(LNode*la,LNodeLNode*pre=NULL,*first=NULL;While(la&&lb){if(la->data<=lb->data }else}}if(la)}}

return}LNode*ABC(LNode*laLNode*lb)//laAlbBNew{LNode*tmp,*tb,*HL=newLNode;tmp=HL;if(la&&lb){while(la) tb=while(tb!=NULL&&la->data!=tb->data)tb=tb-if(tb!=NULL&&la->data==tb->data) tmp->data=la->data;la=la->next;if(la&&tb&&tb->next) tmp->next=newLNode;tmp=tmp-}elsetmp->next=}return}return}struct{chardata;其中data為結點值域,leftChild和rightChild分別為指向左、右結點的指針域,根據(jù)下面函數(shù)intBTreeCount(BinTreeNode*BT{if(BT==NULL)returnreturnBTreeCount(BT->leftChild)+BTreeCount(BT->rightChild)+} BlnTreeNode其中data為結點值域,leftChild和rightChild分別為指向左、右結點的指針域根據(jù)下面函數(shù)的定義函數(shù)的功能。算法中參數(shù)BT指向一棵二叉樹的樹根結點。BinTreeNode*BinTreeSwopX(BinTreeNode*BT){if(BT==NULL)returnNULL; *pt=newBinTreeNode;>leftChild>rightChildreturnpt;}}BTstructBinTreeNode{charBinTreeNode*left,其中data為結點值域,left和right分別為指向左、右結點的指針域,根據(jù)下面函數(shù)編寫出刪除一棵二叉樹中所有結點的算法,并使樹根指針為空。假定參數(shù)BT初始指向這棵二叉樹的根結點。voidClearBTree(BinTreeNode*&{if(BT!=NULL)deleteBT; }}intfullBTree(BTreeNode*{if(BT==NULL) return0;intdepth,de=1;intdep1=fullBTree(BT->left)+1;intdep2=fullBTree(BT->right)+1if(dep1!=dep2)return0; for(inti=0;i<depth;i++)de=2*deif(de==dep1+dep2+1)return1return0;}intcheck(structbt{if(root==NULL)returnif(root->ltree==NULL&&root->rtree==NULL)returnif(root->ltree==NULL&&root->rtree!=NULL||root->ltree!=NULL&&root->rtree==NULL)return0;returncheck(root->ltree)&check(root-}-給定權集為3,4,11,2,16,19Huffman9帶權外部路徑長度*4+3*4+4*39*211*216*219*2= : :56 18191021 12888假設通信電文使用的字符集為{a,b,c,d,e,f},各字符的在電文中出現(xiàn)的頻度分別為34,5,12,23,8,5 7%、9%、15%、30%,8899457A B C D E F G H 個結點的左子樹根結點的權值小于或等于右子樹根結點的權值的次序構造WPL56WPL=(2+4)*5+(5+7+8)*4+16*2+30*1=172已知first為單鏈表的表頭指針,鏈表中的都是整型數(shù)據(jù),試寫出實現(xiàn)下列運算的遞歸算intMAX(LNode{if(first->next==NULL)returnfirst->data;inttmp=MAX(first->next);returnfirst->data>tmp?first->data:tmp}intNUM(LNode{if(first==NULL)return0;return1+NUM(first->next);}C=(a1,b1,…am,bm,bm+1…,…bn)m<=nC=(a1,b1,…an,bn,bn+1…,…bm)m>nnLNode*Union(LNode*A,LNode{LNode LNode*r=B- qb)qb->next=pa->next;pa->next=qb; qb=r;} }intDepthBTree(BTreeNode*{if( returnintdep1=DepthBTree(BT->left);intdep2=DepthBTree(BT->right);if(dep1>dep2)returndep1+1;returndep2+1;}intFindBTree(BTreeNode*BT,ElemType{if(BT==NULL) returnfalse;if(BT->data==x){return}if(FindBTree(BT->left,x))returntrue;if(FindBTree(BT->right,x))returntrue;returnfalse;}VoidSeparate(LNode*l,LNode*la,LNode*lb,LNode l{LNode //la數(shù)字lblc if(isdigit(p->data)){pa->next=p;elseif(isalpha(p->data)){pb->next=p;pb=p;}else{pc->next=p;pc=p;}} }ListNode*Merge1(ListNode*&p1,ListNode*&p2)ListNodea;//aListNode*p=&a;//pp->link=whilep1NULL&&p2NULLif(p1->data<p2->data){p1=p1->link;}else{p->link=p2;p2=p2->link;}if(p1!=NULL)p->link=p1;elsep->link=p2; (4)a.link}voidunknown(ListNode*&first){ListNode*p=first-if(p!=NULL&&p->link!=NULL){q=p->link;p->link=while(q->link!=NULL){r=q->link;q->link=p=q=}q->link=p;first=q;}elsefirst=}算法的功能first下面是判斷一個帶表頭結點的雙向循環(huán)鏈表L是否對稱相等的算法,請在算法中 Intsymmetry(DoubleListL){intsym=1;DoubleNode*p=L->rLink,*q=L-while((p!=q||p->lLink==q)&&(1)sym==1)if(p->data==q->data){p=p-q=q-}else (4)_ return}voidPurge_linkst(LisNode1aListNodep,q,t;ElemTypetemp;temp=P->data;if(P!=NULL&&p->data!=temp_)elsewhile(p!=NULL&&p->data==temp){deletet;}q-}}}voidpurge_linkst(ListNode*&laListNode*p,*q;if(la==NULL)return;q=la;p=la->link;while(p){if(p&&(1)_p->data!=q->dataelse{

{q=p;p=p-q->link=(2)p->link p=(3)_q->link}}//intcomstr(LinkStrings1,LinkString{//s1和s2if(s1->date<s2->date)return-1;if(s1->date>s2->date)return1;①s1=s1->next②s2=s2->next}if(③s2)return-1;if(④s1)return1;⑤return0} NodeLevel(BTreeNode*BT,ElemType{if(BT==NULLreturn0;0elseif(BT->data==X)return1;elseintc1=NodeLevel(BT->left,X);if(c1>=1)_returnc1+1;intc2=Nodelevel(BT->right,x);if_returnc2+1;return}},typedefDateTypedata[MaxSize];intfront[2],rear[2];intEnQueue(Queue2*Q,inti,DateTypeix1;0if(i<0||i>1)return0; ①1-i]return0; ②Q->rear[i] Q->rear[i]=[③(Q->rear[i]+1)%Maxsize }typedefdataTypedata[maxsize];intfront[2],length[2];}iintEnQueue(Queue2*Q,IntI,DataType{if(i<0||i>1)return0;if((1))returnq->data[(2q->length[(3return}(front[i]=Q-idiff(都大于-32768)L1L2(A,B#include<malloc.h>typedefstructnodeintstructnode}voiddiff(Node*A,Node*B,Node{intlastnum;Node*p; A&&Bif(A->d<B->d){

lastnum=A->d p=(Node*)malloc(sizeof(Node)); *r=p doA=A- A&&A-}

elseif(A->d>B-else{ while(A&&A->d==lastnum)A=A->next;}while(A){p=(Node*)malloc(sizeof(Node)); >next=*r while(A&&A->d==lastnum)A=A-}}對以結點的單鏈表作為結構的兩個遞增有序表(表中不存在值相同的數(shù)據(jù)元素)進行如下操作將voidunion(LinkListLa,LinkList{LinkListpre=La,q;LinkListpa=La->next;LinkListpb=Lb->next;(Lb);while(pa&&{if(pa->data<pb->{pre=pa;pa=pa->next;}elseif(pa->data>pb-{pre->next=pb; pre=pb;pb=pb->pre->next= }{q=pb;pb=pb-> }}if}

ElemTypeDeleteHeap(Heap&{if(HBT.size==0){cerr<<”HeapElemTypetemp=HBT.heap[0];if(HBT.size==0)return temp;ElemTypex=HBT.heap[HBT.size];inti=0;intj=2*iwhile(j<=HBT.size一1){//調(diào)整到孩子為空時止if(j<HBT.size一1&&HBT.heap[j]>HBT.heap[j+1]) j++;HBT.heap[i]=HBT.heap[j]i=j; } HBT.heap[I]=xreturntemp;} { forWhile(! count<<Pop(S)<<”}該算法被調(diào)用后得到的輸出結果為4715189585whileIntcount(ListNode*Ha,ElemType{//Ha為不結點的單鏈表的頭指int if(Ha->data== }return應該修改為以下while(Ha!=NULLif(Ha->data==x)n++;A、BC。從C4Length(maxLength(getData(intk)提取第ksetData(intk,intval)修改第kval。temte<classT>voidmerge(SeqList<int>&A,SeqList<int>&B,SeqList<int>&{intm=A.Length(),n=B.Length(),mpn=m+n;if(mpn>C.maxLength()){}intint}while(i<m&&j<n)if(av<=bv){C.setData(k++,av);av=A.getData(++i);}if(av>=bv){C.setData(k++,bv);} while(k<mpn){C.setData(k++,av);av=A.getData(++i);} while(k<mpn){C.setData(k++,bv); voidunknown(Queue&Q){StackS;intd;while(!Q.IsEmpty(){Q.DeQueue(dS.Push(d}while(!S.IsEmpty(){S.Pop(dQ.EnQueue(d}}功能voidmain(){stackS;charx,y;x='c';y='k';S.Push(x);S.Push('a');S.Push(y);S.Pop(x);S.Push('t');S.Push(x);S.Pop(x);S.Push('s'while(!S.IsEmpty()){S.Pop(y);cout<<y;}cout<<y<<endl;}輸出結果stac stacListNode(data,link),閱讀以下函數(shù)intunknown(ListNode*Ha){//Ha為指向結點的單鏈表的頭指intn=ListNode*p=Ha->link;while(p!=NULL){p=p-}return}La,b,c,d,e,f,gunknown(L)之后輸出的結果是什么。答:intf(chars1[],char{inti=0,j=0;return1;elseif(s1[i]<s2[j])return-1;else}return1;elseif(s2[j])return-1;elsereturn}s1與s2s1s20;s1>s21;s1<s2BinTreeNodestructBinTreeNode{ElemType參數(shù)x一開始具有的值小于樹中所有結點的值。試根據(jù)下面的函數(shù)定義此算法的功能。intJB(BinTreeNode*bt,ElemType&{if(bt==NULL)return1;else{if(JB(bt->left,x)==0)returnif(bt->data<x)return0;if(JB(bt->right,x)==0)returnelsereturn}}算能判斷二叉樹bt是否為一棵二叉搜索樹,若是則返回1否則返回temte<classT>voidunknown(TA[],intn){ =0;for(inti=0;i<n;i++)if(A[i]!=0){if(i ) ]=A[i];A[i]=0;}}}狀態(tài):A[{12,24,38,29,45,0,0,0,0,0,0, 算 intunknown(intA[],intn){if(n==1)returnA[0];inttemp=unknown(A,n-returnA[n-1]>temp?A[n-1]:}假定一個線性序列為(38,42,55,15,23,44,30,74,48,26),根據(jù)此線性序列中元素的排列次序生成一棵二所有葉子結點:已知串的結構為動態(tài)分配的順序串。閱讀下列算法,并回答問寫出執(zhí)行函數(shù)調(diào)用strc(s,r)的返回結果,其中s=〃aba〃,r=〃abababa〃 strcHString*strHString*subintstrc(HString*sub,HString*{inti=0,j,k,countwhile(i<str->length–sub->length{j=i;while(k<sub->length&&str->ch[j]==sub->ch[k]{j++;}if(k==sub->{count++;i=j–sub->length+1;}elsei++;}return} BTC(BTreeNode{if(BT!=NULL)if(BT->left!=NULL&&BT->right!=NULL)BTreeNode*t=BT->left;BT->left=BT->right;BT->right=t;}以下函數(shù)中,h是結點的雙向循環(huán)鏈表的頭指針h結點數(shù)為1時循環(huán)體的執(zhí)行0次 結點數(shù)為6時循環(huán)體的執(zhí)行3次intf(DListNode{DListNode*p,*q;intj=1;while(p!=q&& p->prior!=q)if(p->data==q->data){p=p->next;}elsej=0;returnj;}voidalgo(Stack{intQueueQ;StackT;while(!StackEmpty(S)){if((i=!i)!=0)Push(&T,Pop(&S)); }}algo(&s)S6421357(7voidAB(list&{}假定調(diào)用該算法時線性表L為(35,19,12,15),則調(diào)用返回后線性表L變?yōu)? 、、 if(head-{while(p-{p=p-}}已知鏈串的結構描述如#defineNodeSize4typedefstructNode{chardata[NodeSize];structNode*next;}*t1和t2的串值分別為″″和″″時,寫出f31(t1,t2)的返回值;t1t2″Japan″和″Japanese″f31(t1,t2)t1t2″stringf31(t1,t2)inff31(LinkStrt1,LinkStrinti;whileforif(t1->data[i]==′\0′&&t2->data[i]==′\0′)return0;if(t1->data[i]==′\0′)return–1;if(t2->data[i]==′\0′)returnif(t1->data[i]>t2->data[i])return1;if(t1->data[i]<t2->data[i])}t2=t2-}}voidAG(BtreeNode*BT)//BT{BTreeNode*s[10];inttop=-1;BTreeNode*p=BT;while(top!=-1|| }if(top!=-1){cout<<p->data<<”}}}該算法的功能為設有一個二維數(shù)組A[10][20],按列為主序存放于續(xù)的空間中,A[O][O]的地址是200,每個數(shù)組元素占1個字,則A[6][2]的字地址是多少。A[6][2]的字地 按列時,計算A[i][j]地址的為其中首地址LOC(0,0)=200,每個數(shù)組元素的占用數(shù)d=1,二維數(shù)組的行數(shù)m=10,則數(shù)組元素A[6][2]的LOC(6,2)=200+(2*10+6)*1=226首元素A[0][0][0]的地址是1000,求A[8][4][10]的地址:m3d則對于任一數(shù)組元素A[i][j][k],它的地址為LOC(i,j,k)=LOC(0,0,0)+(i*m2*m3+j*m3+k)*d根據(jù)題意,m1=10,m2=20,m3=15,d=4,LOC(0,0,0)=1000,則有 54{int3int3891742

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論