版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
作業(yè)1:線性表作業(yè)目的了解線性表的邏輯結(jié)構(gòu)特性,以及這種特性在計(jì)算機(jī)內(nèi)的兩種存儲(chǔ)結(jié)構(gòu)。掌握線性表的順序存儲(chǔ)結(jié)構(gòu)的定義及其C語(yǔ)言的實(shí)現(xiàn)。掌握線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表的定義及其C語(yǔ)言的實(shí)現(xiàn)。掌握線性表在順序存儲(chǔ)結(jié)構(gòu)即順序表中的各種基本操作。掌握線性表在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)——單鏈表的各種基本操作。作業(yè)規(guī)定1.認(rèn)真閱讀和掌握本實(shí)驗(yàn)的程序。2.上機(jī)運(yùn)營(yíng)本程序。3.保存和打印出程序的運(yùn)營(yíng)結(jié)果,并結(jié)合程序進(jìn)行分析。4.按照對(duì)線性表和單鏈表的操作需要,重新改寫(xiě)主程序并運(yùn)營(yíng),打印出文獻(xiàn)清單和運(yùn)營(yíng)結(jié)果。作業(yè)內(nèi)容1.順序表的操作請(qǐng)編制C程序,運(yùn)用順序存儲(chǔ)方式來(lái)實(shí)現(xiàn)下列功能:根據(jù)鍵盤(pán)輸入數(shù)據(jù)建立一個(gè)線性表,并輸出該線性表;然后根據(jù)屏幕菜單的選擇,可以進(jìn)行表的創(chuàng)建,數(shù)據(jù)的插入刪除并在插入和刪除數(shù)據(jù)后再輸出線性表;最后在屏幕菜單中選擇0,即可結(jié)束程序的運(yùn)營(yíng)。分析:當(dāng)我們要在順序表的第i個(gè)位置上插入一個(gè)元素時(shí),必須先將線性表的第i個(gè)元素之后的所有元素一次后移一個(gè)位置,以便騰出一個(gè)位置,再把新元素插入到該位置。當(dāng)要?jiǎng)h除第i個(gè)元素時(shí),也只需將第i個(gè)元素之后的所有元素前移一個(gè)位置。算法描述:對(duì)每個(gè)算法,都要寫(xiě)出算法的中文描述。規(guī)定分別寫(xiě)出在第i個(gè)(從1開(kāi)始計(jì)數(shù))結(jié)點(diǎn)前插入數(shù)據(jù)為x的結(jié)點(diǎn)、刪除指定結(jié)點(diǎn)、創(chuàng)建一個(gè)線性表。打印線性表等的算法描述。2.單鏈表的操作請(qǐng)編制C程序,運(yùn)用鏈?zhǔn)酱鎯?chǔ)方式來(lái)實(shí)現(xiàn)線性表的創(chuàng)建、插入、刪除和查找等操作。具體地說(shuō),就是要根據(jù)鍵盤(pán)輸入的數(shù)據(jù)建立一個(gè)單鏈表;然后根據(jù)屏幕菜單的選擇,可以進(jìn)行數(shù)據(jù)的插入或刪除,并在插入或刪除數(shù)據(jù)后,再輸出單鏈表;最后在屏幕菜單中選擇0,即可結(jié)束程序的運(yùn)營(yíng)。算法描述:規(guī)定分別寫(xiě)出在帶頭結(jié)點(diǎn)的單鏈表中第i(從1開(kāi)始計(jì)數(shù))個(gè)位置之后插入元素、創(chuàng)建帶頭結(jié)點(diǎn)的單鏈表、在帶頭結(jié)點(diǎn)的單鏈表中刪除第i個(gè)位置的元素、順序輸出單鏈表的內(nèi)容等的算法描述。實(shí)驗(yàn)一:1.實(shí)驗(yàn)程序源代碼#defineTURE1#defineFALSE0#defineOK1#defineERROR0#defineOVERFLOW-2#include<stdio.h>#include<stdlib.h>#defineML1//線?性?表à¨a#defineTURE1#defineFALSE0#defineOK1#defineERR0typedefstruct{?intlist[ML]; intsize; intMAXSIZE;}sqList;sqList*Init_List(sqList*L,intms);voidDisp_List(sqList*L);intLocateElem_List(sqList*L,intx);intInsert_List(sqList*L,intx,intmark);intDelete_List1(sqList*L,intitem);intDelete_List2(sqList*L,intmark);sqList*Init_List(sqList*L,intms){ L=(sqList*)malloc(ms*sizeof(sqList));?if(!L){ printf("申|¨o請(qǐng)?內(nèi)¨2存??空?間?出?錯(cuò)?¨a\n"); ?exit(OVERFLOW);?}?else??L->size=0;?L->MAXSIZE=ms; returnL;}voidDisp_List(sqList*L){ inti; for(i=0;i<L->size;i++) printf("%d",L->list[i]);?printf("\n");}intLocateElem_List(sqList*L,intx){ inti=0; for(i=0;i<=L->size;i++)? if(L->list[i]==x) returni;? if(i>L->size) ??return-1;}intInsert_List(sqList*L,intx,intmark){ inti=1;?if(L->size>=L->MAXSIZE)? return-1;?if(mark>0){? for(i=L->size+1;i>=mark;i--)?? L->list[i+1]=L->list[i];??L->list[i]=x; }?elseif(mark<0) ?L->list[L->size]=x; L->size++; returnFALSE;}intDelete_List1(sqList*L,intitem){ inti,j;?for(i=0;i<L->size;i++) ?if(item==L->list[i]) ?break;?if(i<L->size){ for(j=i+1;j<L->size-1;j++) ??L->list[j]=L->list[j+1]; ??L->size--; ?returni;} returnFALSE;}intDelete_List2(sqList*L,intmark){ inti,item; if(mark>0){? item=L->list[mark]; for(i=mark+1;i<L->size-1;i++)? L->list[i]=L->list[i+1]; ?L->size--; ?returni;?} returnFALSE;}voidmain(){ intp,n,x=0;sqLista,*b; b=Init_List(&a,ML);?printf("listaddr=%d\tsize=%d\tMaxSize=%d",b->list,b->size,b->MAXSIZE);?while(1){??printf("\n請(qǐng)?輸o?入¨?值|ì,ê?0為a結(jié)¨¢束o?輸o?入¨?:êo");??scanf("%d",&x); ?if(!x)break;? printf("\n請(qǐng)?輸o?入¨?插?入¨?位?置?:êo\n"); scanf("%d",&p);? Insert_List(b,x,p);??printf("\n線?性?表à¨a為a:êo\n");Disp_List(b); }?while(1){ ?printf("\n請(qǐng)?輸o?入¨?查¨|找¨°值|ì,ê?輸o?入¨?0結(jié)¨¢束o?查¨|找¨°操¨′作á??:êo\n"); scanf("%d",&x);??if(!x)break; ?n=LocateElem_List(b,x); if(n<0)printf("\n沒(méi)?找¨°到ì?\n"); ?else?? printf("\n又??符¤?合?條??件t的ì?值|ì,ê?位?置?為a:êo%d\n",n+1);?} while(1){ ?printf("\n請(qǐng)?輸o?入¨?刪|?除y值|ì,ê?輸o?入¨?0結(jié)¨¢束o?查¨|找¨°操¨′作á??:êo\n");? scanf("%d",&x);? if(!x)break; ?n=Delete_List1(b,x);? if(n<0) ?printf("\n沒(méi)?找¨°到ì?\n");??else{?? printf("\n刪|?除y成¨|功|,ê?線?性?表à¨a為a:\n");??Disp_List(b); ?} } while(1){??printf("\n請(qǐng)?輸o?入¨?刪|?除y值|ì位?置?,ê?輸o?入¨?o結(jié)¨¢束o?查¨|找¨°操¨′作á??:\n"); ?scanf("%d",&p); ?if(!p)break;? n=Delete_List2(b,p);??if(p<0)printf("\n位?置?越?界?\n"); ?else{? printf("\n線?性?表à¨a為a:\n"); ??Disp_List(b); ?}?}}2.實(shí)驗(yàn)運(yùn)營(yíng)圖3.算法分析:(1)順序表的初始化即是發(fā)明一個(gè)空表順序表的初始化即構(gòu)造一個(gè)空表,這對(duì)表是一個(gè)加工型的運(yùn)算,因此,將L設(shè)為指針參數(shù),一方面動(dòng)態(tài)分派存儲(chǔ)空間,然后,將表中l(wèi)ength指針置為0,表達(dá)表中沒(méi)有數(shù)據(jù)元素。算法如下:StatusInitList_Sq(SqList*L){L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//分派存儲(chǔ)空間if(!L->elem)exit(OVERFLOW);//存儲(chǔ)分派失?。?>length=0;//空表長(zhǎng)度為0L->listsize=LIST_INIT_SIZE;//初始存儲(chǔ)容量returnOK;}//InitList_Sq此算法的時(shí)間復(fù)雜度為O(1)。(2)在順序表中“查詢”是否存在一個(gè)和給定值滿足鑒定條件的元素的最簡(jiǎn)樸的辦法是,依次取出結(jié)構(gòu)中的每個(gè)元素和給定值進(jìn)行比較。intLocateElem(SqListL,ElemTypee,void(*compare)(ElemType,ElemType)){//在順序表L中查找第1個(gè)值與e滿足鑒定條件compare()的元素//若找到,則返回其在L中的位序,否則返回0i=1;//i的初值為第1元素的位序p=L.elem;//p的初值為第1元素的存儲(chǔ)位置while(i<=L.length&&!(*compare)(*p++,e))算法時(shí)間復(fù)雜度的分析:算法中的基本操作是“鑒定”,它出現(xiàn)在while循環(huán)中,而函數(shù)compare()的時(shí)間復(fù)雜度顯然是個(gè)常量。因此執(zhí)行鑒定的次數(shù)取決于元素在線性表中的“位序”,至多和表長(zhǎng)相同。所以,此算法的時(shí)間復(fù)雜度為:O(ListLength(L))。(3)假設(shè)在線性表的第i個(gè)元素之前插入一個(gè)元素e,使得線性表(a1,a2,...,ai-1,ai,ai+1,...,an)改變成為表長(zhǎng)為n+1表:(a1,a2,...,ai-1,e,ai,ai+1,...,an)。即:1、改變了表中元素之間的關(guān)系,使<ai-1,ai>改變?yōu)?lt;ai-1,e>和<e,ai>2、表長(zhǎng)增1(4假設(shè)刪除線性表中第i個(gè)元素,使得線性表:(a1,a2,...,ai-1,ai,ai+1,...,an);改變成為表長(zhǎng)為n-1的線性表:(a1,a2,...,ai-1,ai+1,...,an)。即:1、改變了表中元素之間的關(guān)系,使<ai-1,ai>和<ai,ai+1>改變?yōu)椋迹醝-1,ai>。2、表長(zhǎng)減1實(shí)驗(yàn)二1實(shí)驗(yàn)源程序#include<stdio.h>#include<malloc.h>#definenull0typedefintElemType;/*字á?符¤?型¨a數(shù)oy據(jù)Y*/structLNode{?ElemTypedata; structLNode*next;};??voidsetnull(structLNode**p);intlength(structLNode**p);ElemTypeget(structLNode**p,inti);voidinsert(structLNode**p,ElemTypex,inti);voiddele(structLNode**p,inti);voiddisplay(structLNode**p);intlocate(structLN(yùn)ode**p,ElemTypex);voidmain(){?structLNode*head,*q;/*定?§義°?靜2態(tài)??變à?量¢?*/ intselect,x1,x2,x3,x4; inti,n;?intm,g; chare,y; setnull(&head);/*建?§設(shè)|¨¨鏈¢??表à¨a并?é設(shè)|¨¨置?為a空?表à¨a*/?printf("請(qǐng)?輸o?入¨?數(shù)oy據(jù)Y長(zhǎng)?è度¨¨:");?scanf("%d",&n);?for(i=1;i<=n;i++) {??printf("將?數(shù)oy據(jù)Y插?入¨?到ì?單죤鏈¢??表à¨a中D:");??scanf("%d",&y);? insert(&head,y,i); }/*插?入¨?數(shù)oy據(jù)Y到ì?鏈¢??表à¨a*/??display(&head);?/*顯?示o?鏈¢??表à¨a所¨′有?D數(shù)oy據(jù)Y*/??printf("select1求¨?長(zhǎng)?è度¨¨length()\n"); ?printf("select2取¨?結(jié)¨¢點(diǎn)ì?get()\n"); printf("select3求¨?值|ì查¨|找¨°locate()\n"); ?printf("select4刪|?除y結(jié)¨¢點(diǎn)ì?delete()\n");??printf("select0退a?出?\n"); ?printf("inputyourselect:");??scanf("%d",&select);while(select!=0) {switch(select)? {? ?case1:???{ ???x1=length(&head); ???printf("輸o?出?單죤鏈¢??表à¨a的ì?長(zhǎng)?è度¨¨%d",x1); ???display(&head); ??}break; case2:? ?{ ?printf("請(qǐng)?輸o?入¨?要°a取¨?得ì?結(jié)¨¢點(diǎn)ì?:");?? scanf("%d",&m); ?x2=get(&head,m);? printf("%d",x2);? ? display(&head);? ?}break; ?case3: ? { ???printf("請(qǐng)?輸o?入¨?要°a查¨|找¨°的ì?數(shù)oy據(jù)Y:"); scanf("%d",&e);? x3=locate(&head,e);? printf("%d",x3); ? ?display(&head); ? }break;? ?case4: ?{ ?printf("請(qǐng)?輸o?入¨?要°a刪|?除y的ì?結(jié)¨¢點(diǎn)ì?:");? ?scanf("%d",&g);? dele(&head,g);? ?display(&head);???}break;??} printf("select1求¨?長(zhǎng)?è度¨¨length()\n");? printf("select2取¨?結(jié)¨¢點(diǎn)ì?get()\n");??printf("select3求¨?值|ì查¨|找¨°locate()\n");??printf("select4刪|?除y結(jié)¨¢點(diǎn)ì?delete()\n"); ?printf("select0退a?出?\n"); printf("inputyourselect:");??scanf("%d",&select); }?}voidsetnull(structLNode**p){?*p=null;}intlength(structLNode**p){ intn=0;?structLNode*q=*p;?while(q!=null)?{ n++; q=q->next;?} return(n);}ElemTypeget(structLNode**p,inti){ intj=1;?structLNode*q=*p; while(j<i&&q!=null)?{ q=q->next; ?j++;?} if(q!=null)??return(q->data);?else?{printf("位?置?參?數(shù)oy不?正y確¨?¤!\n");?return0;} }intlocate(structLNode**p,ElemTypex){?intn=0; structLNode*q=*p;?while(q!=null&&q->data?。絰)?{??q=q->next; ?n++;?}?if(q==null)??return(-1);?else return(n+1);}voidinsert(structLN(yùn)ode**p,ElemTypex,inti){?intj=1; structLNode*s,*q;?s=(structLNode*)malloc(sizeof(structLNode)); s->data=x; q=*p;?if(i==1) {??s->next=q; *p=s;?} else { ?while(j<i-1&&q->next!=null)? { ?q=q->next; ? j++; ?} ?if(j==i-1)? {? ?s->next=q->next;? q->next=s;??}??else ?printf("位?置?參?數(shù)oy不?正y確¨?¤!\n");?} }voiddele(structLNode**p,inti){?intj=1; structLN(yùn)ode*q=*p,*t;?if(i==1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市豐臺(tái)區(qū)市級(jí)名校2024屆高三下學(xué)期質(zhì)量檢測(cè)試題數(shù)學(xué)試題
- 人社局健康知識(shí)培訓(xùn)課件
- 動(dòng)物疫病知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋海南職業(yè)技術(shù)學(xué)院
- 燃?xì)夤こ汰h(huán)境保護(hù)合同
- 酒店項(xiàng)目管理招聘協(xié)議
- 森林公園綠化保護(hù)工程合同
- 體育館更衣室修繕合同
- 海鮮市場(chǎng)冷藏柜租賃協(xié)議模板
- 營(yíng)養(yǎng)科醫(yī)生勞動(dòng)合同范本
- 酒店管理人才聘用合同樣本
- 巖溶區(qū)水文地質(zhì)參數(shù)研究-洞察分析
- 大學(xué)體育與健康 教案全套 體育舞蹈 第1-16周
- 一年級(jí)數(shù)學(xué)練習(xí)題-20以內(nèi)加減法口算題(4000道)直接打印版
- 施工作業(yè)安全管理規(guī)定(4篇)
- 浙江省金華市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版質(zhì)量測(cè)試((上下)學(xué)期)試卷及答案
- 傳媒行業(yè)突發(fā)事件應(yīng)急預(yù)案
- 2024年《工會(huì)法》知識(shí)競(jìng)賽題庫(kù)及答案
- 《中國(guó)血脂管理指南》考試復(fù)習(xí)題庫(kù)(含答案)
- 人教版道德與法治八年級(jí)上冊(cè)2.1網(wǎng)絡(luò)改變世界課件
- 外研版小學(xué)英語(yǔ)(三起點(diǎn))六年級(jí)上冊(cè)期末測(cè)試題及答案(共3套)
- 中醫(yī)診療規(guī)范
評(píng)論
0/150
提交評(píng)論