




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
課程名稱:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一1.實(shí)驗(yàn)題目設(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的鏈表在算法中不允許破壞。2.程序核心代碼structLNode{intdata;structLNode*next;};typedefstructLNode*LinkList;LinkListUnion(LinkListha,LinkListhb){LinkListhead=(LNode*)malloc(sizeof(LNode));head->next=ha;LNode*pa,*pb,*pTmp;pa=ha->next;pb=hb->next;pTmp=ha;while(pa&&pb){if(pa->data<pb->data){pTmp=pa;pa=pa->next;}elseif(pa->data>pb->data){LNode*Lr=(LNode*)malloc(sizeof(LNode));1Lr->data=pb->data;Lr->next=pa;pTmp->next=Lr;pTmp=Lr;pb=pb->next;}else{pTmp=pa;pa=pa->next;pb=pb->next;}}if(pa){pTmp->next=pa;}else{while(pb){LNode*Lr=(LNode*)malloc(sizeof(LNode));Lr->data=pb->data;pTmp->next=Lr;pTmp=Lr;pb=pb->next;}pTmp->next=NULL;}free(head);returnha;}intListInsert(LinkListL,inti,inte){intj=0;LinkListp=L,s;while(p&&j<i-1)p=p->next;j++;{}if(!p||j>i-1)return0;s=(LinkList)malloc(sizeof(structLNode));/*生成新結(jié)點(diǎn)*/s->data=e;/*插入L中*/s->next=p->next;p->next=s;return1;}2
intmain(){LinkListha,hb;intn,i;intdata;InitList(&ha);printf("請(qǐng)輸入ha中數(shù)據(jù)的個(gè)數(shù):");scanf("%d",&n);printf("請(qǐng)依次輸入ha中的數(shù)據(jù):\n");for(inti=1;i<=n;i++){scanf("%d",&data);ListInsert(ha,i,data);}printf("ha=");LinkListp=ha->next;while(p){printf("%d",p->data);p=p->next;}printf("\n");InitList(&hb);printf("請(qǐng)輸入hb中數(shù)據(jù)的個(gè)數(shù):");scanf("%d",&n);printf("請(qǐng)依次輸入hb中的數(shù)據(jù):\n");for(i=1;i<=n;i++){scanf("%d",&data);ListInsert(hb,i,data);}printf("hb=");p=hb->next;while(p){printf("%d",p->data);p=p->next;}printf("\n");printf("hb歸并到ha后,新的ha=");p=Union(ha,hb)->next;while(p){3
4.實(shí)驗(yàn)總結(jié)要注意歸并時(shí)若ha表中已有的數(shù)據(jù)若hb中也有,則hb中的數(shù)據(jù)不歸并到ha中,hb的鏈表在算法中不允許破壞。4實(shí)驗(yàn)二1.實(shí)驗(yàn)題目結(jié)合書上第41頁的例子(一元多項(xiàng)式相加),采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),將兩個(gè)線性鏈表表示的一元多項(xiàng)式相加,并輸出。2.程序核心代碼typedefstructLNode{intdata;//存儲(chǔ)系數(shù)intflag;//存儲(chǔ)對(duì)應(yīng)冪數(shù)structLNode*next;}LNode;//建立帶頭結(jié)點(diǎn)的單鏈表,n項(xiàng)多項(xiàng)式voidCreateList(LNode**L,intn){LNode*p;inti=0;*L=(LNode*)malloc(sizeof(LNode));(*L)->next=NULL;for(i=0;i<n;++i){p=(LNode*)malloc(sizeof(LNode));scanf("%d%d",&(p->data),&(p->flag));p->next=(*L)->next;(*L)->next=p;//插入鏈表}}//多項(xiàng)式L1與L2對(duì)應(yīng)項(xiàng)相加得到新的L2voidPolyoAdd(LNode**L1,LNode**L2){intck;LNode*p,*q;p=NULL;q=NULL;q=(*L1)->next;while(q){5
ck=0;p=(*L2)->next;while(p){if(q->flag==p->flag){ck=1;break;}p=p->next;}if(ck==1)//同類項(xiàng)合并{p->data+=q->data;q=q->next;}else//否則,直接將非同類項(xiàng)插到L2最前面{(*L1)->next=q->next;q->next=(*L2)->next;(*L2)->next=q;q=(*L1)->next;}}}intmain(){intm=0;LNode*p1,*p2;p1=NULL;p2=NULL;printf("設(shè)定多項(xiàng)式A的項(xiàng)數(shù):\n");scanf("%d",&m);printf("請(qǐng)輸入多項(xiàng)式CreateList(&p1,m);printf("A");A的系數(shù)及對(duì)應(yīng)位冪次:\n");PolyoPrint(&p1);printf("設(shè)定多項(xiàng)式B的項(xiàng)數(shù):\n");scanf("%d",&m);printf("請(qǐng)輸入多項(xiàng)式B的系數(shù)及對(duì)應(yīng)位冪次:\n");CreateList(&p2,m);printf("B");PolyoPrint(&p2);6
4.實(shí)驗(yàn)總結(jié)合并多項(xiàng)式是指相同指數(shù)的項(xiàng)的系數(shù)相加,比較兩個(gè)鏈表的節(jié)點(diǎn)的指數(shù)的大小,作為指針移動(dòng)的條件,同事合并的過程中應(yīng)消除系數(shù)項(xiàng)為零的節(jié)點(diǎn)。7實(shí)驗(yàn)三1.實(shí)驗(yàn)題目二叉樹的動(dòng)態(tài)二叉鏈表結(jié)構(gòu)中的每個(gè)結(jié)點(diǎn)有三個(gè)字段:data,lchild,rchild。其中指針lchild下標(biāo)datalchildrchild1234567ABCDEFG23050006400070和rchild的類型為bitree。靜態(tài)二叉鏈表是用數(shù)組作為存儲(chǔ)空間,每個(gè)數(shù)組元素存儲(chǔ)二叉樹的一個(gè)結(jié)點(diǎn),也有三個(gè)字段:data,lchild,rchild。所不同的是,lchild和rdhild為integer型,分別用于存儲(chǔ)左右孩子的下標(biāo),如果沒有左右孩子,則相應(yīng)的值為0。例如,二叉樹的靜態(tài)二叉鏈表如上圖所示。編寫算法由二叉樹的動(dòng)態(tài)二叉鏈表構(gòu)造出相應(yīng)的靜態(tài)二叉鏈表a[1..n],并寫出其調(diào)用形式和有關(guān)的類型描述。其中n為一個(gè)確定的整數(shù)。2.程序核心代碼typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;8typedefstructNode//靜態(tài)鏈表結(jié)點(diǎn)結(jié)構(gòu){chardata;//結(jié)點(diǎn)數(shù)據(jù)introw,lchild,rchild;//下標(biāo),左右孩子}Node;Node*st;//st容量足夠大staticintlength=0;staticintnum=0;voidcreateBiTree(BiTree&T){charch;scanf("%c",&ch);if(ch=='#')T=NULL;else{if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))printf("error");T->data=ch;//生成根結(jié)點(diǎn)createBiTree(T->lchild);//構(gòu)造左子樹createBiTree(T->rchild);//構(gòu)造右子樹}}voidPreOrder(BiTreebt)//先序遍歷二叉樹,填寫靜態(tài)鏈表的“下標(biāo)”和data域{if(bt){st[++num].data=bt->data;st[num].row=num;PreOrder(bt->lchild);PreOrder(bt->rchild);}}intLocate(charx){//在靜態(tài)鏈表中查二叉樹結(jié)點(diǎn)的下標(biāo)inti;{for(i=1;i<=num;i++)if(st[i].data==x)9
return(i);}}BiTreeLevelOrderLocateP(BiTreeroot,charx){intfront,rear;BiTreequeue[MAXSIZE],p;p=root;front=rear=0;if(p){queue[rear++]=p;while(front<rear){p=queue[front++];if(p->data==x)returnp;if(p->lchild)queue[rear++]=p->lchild;if(p->rchild)queue[rear++]=p->rchild;}}}voidDynaToST(BiTreet){inti;BiTreep;PreOrder(t);for(i=1;i<=num;i++){p=LevelOrderLocateP(t,st[i].data);if(p->lchild)st[i].lchild=Locate(p->lchild->data);elsest[i].lchild=0;//無左孩子,其lchild域填0if(p->rchild)st[i].rchild=Locate(p->rchild->data);elsest[i].rchild=0;//無右孩子,其rchild域填0}}intmain(){BiTreet;printf("請(qǐng)輸入二叉樹各結(jié)點(diǎn)的值:\n");10
4.實(shí)驗(yàn)體會(huì)二叉樹的建立是按照先序遍歷的方式遞歸的建立的,因此在輸入二叉樹的節(jié)點(diǎn)中的值時(shí),要注意#字符的個(gè)數(shù)。實(shí)驗(yàn)四1.實(shí)驗(yàn)題目設(shè)無向圖G有n個(gè)點(diǎn)e條邊,編寫算法建立G的鄰接表,并按照深度優(yōu)先搜索輸出頂點(diǎn),要求該算法時(shí)間復(fù)雜性為O(n+e),且除鄰接表本身所占空間之外只用O(1)輔助空間。2.程序核心代碼structedgenode//表{intendver;edgenode*edgenext;結(jié)點(diǎn)};structvexnode//頭結(jié)點(diǎn){charvertex;edgenode*edgelink;};structGraph//無向圖{vexnodeadjlists[Max_Ver_Num];intvexnum,arcnum;};voidCreatAdjList(Graph*G){inti,j,k;edgenode*p1;edgenode*p2;cout<<"請(qǐng)輸入無向圖的頂點(diǎn)數(shù)和邊數(shù):"<<endl;cin>>G->vexnum>>G->arcnum;cout<<endl;cout<<"開始輸入頂點(diǎn)表:"<<endl;12
for(i=1;i<=G->vexnum;i++){cin>>G->adjlists[i].vertex;G->adjlists[i].edgelink=NULL;}cout<<endl;cout<<"開始輸入邊表信息:"<<endl;cout<<endl;for(k=1;k<=G->arcnum;k++){cout<<"請(qǐng)輸入邊<Vi,Vj>對(duì)應(yīng)的頂點(diǎn)序號(hào):";cin>>i>>j;cout<<endl;p1=newedgenode;p1->endver=j;p1->edgenext=G->adjlists[i].edgelink;//將結(jié)點(diǎn)始終插到表結(jié)點(diǎn)后G->adjlists[i].edgelink=p1;p2=newedgenode;p2->endver=i;p2->edgenext=G->adjlists[j].edgelink;G->adjlists[j].edgelink=p2;}}voidDFS(Graph*G,inti,intvisited[]){cout<<G->adjlists[i].vertex<<"";visited[i]=1;edgenode*p=newedgenode;p=G->adjlists[i].edgelink;if(G->adjlists[i].edgelink&&!visited[p->endver]){DFS(G,p->endver,visited);}}voidDFStraversal(Graph*G,charc){cout<<"該圖的深度優(yōu)先遍歷結(jié)果為:"<<endl;13
intvisited[Max_Ver_Num];for(inti=1;i<=G->vexnum;i++){visited[i]=0;}for(inti=1;i<=G->vexnum;i++){if(G->adjlists[i].vertex==c){DFS(G,i,visited);break;}}for(inti=1;i<=G->vexnum;i++){if(visited[i]==0)DFS(G,i,visited);}cout<<endl;}//主程序intmain(){Graph*G=newGraph;CreatAdjList(G);PrintGaph(G);charVi;cout<<"請(qǐng)輸入開始遍歷的頂點(diǎn):"<<endl;cin>>Vi;DFStraversal(G,Vi);cout<<endl;return0;}14
4.實(shí)驗(yàn)體會(huì)在輸入邊表關(guān)系時(shí),要注意因?yàn)槭菬o向圖,所以有兩次建立邊表的過程,不需要重復(fù)輸入。實(shí)驗(yàn)五1.實(shí)驗(yàn)題目二叉排序樹采用二叉鏈表存儲(chǔ)。寫一個(gè)算法,刪除結(jié)點(diǎn)值是X的結(jié)點(diǎn)。要求刪除該結(jié)點(diǎn)后,此樹仍然是一棵二叉排序樹,并且高度沒有增長(注:可不考慮被刪除的結(jié)點(diǎn)是根的情況)。2.程序核心代碼typedefstructBiTNode{ElemTypedata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;staticBiTreehead;//建二叉排序樹BiTreecreateBST(BiTreehead,intnumber){BiTreep;p=(BiTree)malloc(sizeof(BiTNode));p->data=number;p->lchild=p->rchild=NULL;if(head==NULL){returnp;}else{if(p->data<head->data)head->lchild=createBST(head->lchild,number);else16
head->rchild=createBST(head->rchild,number);returnhead;}}//求p的雙親BiTreesearchParent(BiTreehead,BiTreep){if(head->lchild==p||head->rchild==p||head==p||head==NULL)returnhead;else{if(p->data<head->data)returnsearchParent(head->lchild,p);elsereturnsearchParent(head->rchild,p);}}//刪除二叉排序樹中結(jié)點(diǎn)pboolDelete(BiTreep){BiTreeq,s;q=(BiTree)malloc(sizeof(BiTNode));s=(BiTree)malloc(sizeof(BiTNode));if(!p->rchild&&!p->lchild)//刪除的節(jié)點(diǎn)是葉子節(jié)點(diǎn){q=searchParent(head,p);if(q->lchild==p)q->lchild=NULL;elseq->rchild=NULL;}elseif(!p->rchild){//左子樹不為空,右子樹為空searchParent(head,p)->lchild=p->lchild;free(p);}elseif(!p->lchild){//右子樹不為空,左子樹為空searchParent(head,p)->rchild=p->rchild;free(p);}else{//左右子樹都不為空q=p;s=p->lchild;wh
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南科技職業(yè)大學(xué)《大學(xué)體育(Ⅳ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 懷化學(xué)院《草地農(nóng)業(yè)生態(tài)系統(tǒng)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 紹興文理學(xué)院《大學(xué)生的衛(wèi)生與健康》2023-2024學(xué)年第二學(xué)期期末試卷
- 西昌學(xué)院《新聞與紀(jì)實(shí)攝影》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林大學(xué)《紡織物理》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北輕工職業(yè)技術(shù)學(xué)院《虛擬現(xiàn)實(shí)開發(fā)與設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津體育職業(yè)學(xué)院《醫(yī)用化學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京郵電大學(xué)世紀(jì)學(xué)院《蒙臺(tái)梭利教育活動(dòng)設(shè)計(jì)與實(shí)施》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津體育學(xué)院《服務(wù)營銷》2023-2024學(xué)年第二學(xué)期期末試卷
- Adverb revision(教學(xué)設(shè)計(jì))-2023-2024學(xué)年譯林版(三起)英語六年級(jí)下冊(cè)
- 《公司法完整版》課件2024
- 2024年下半年信息系統(tǒng)項(xiàng)目管理師真題及答案
- ??低曤娏π袠I(yè)系統(tǒng)解決方案
- 2024-2030年中國街舞培訓(xùn)行業(yè)發(fā)展趨勢及競爭格局分析報(bào)告
- 期末練習(xí)卷(模擬試題)-2024-2025學(xué)年 一年級(jí)上冊(cè)數(shù)學(xué)人教版
- 白血病合并感染
- GB/T 18601-2024天然花崗石建筑板材
- 有機(jī)肥配施氮肥對(duì)玉米根系生長、氮素利用及產(chǎn)量和品質(zhì)的影響
- 2024年山西省中考語文試卷
- 《大學(xué)美育教程》第二單元-心靈的熏陶:審美活動(dòng)
- 2023年云南公務(wù)員錄用考試《行測》題
評(píng)論
0/150
提交評(píng)論