版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——北科大數(shù)據(jù)結(jié)構(gòu)上機(jī)題代碼《數(shù)據(jù)結(jié)構(gòu)》上機(jī)題(C語言程序)
1.輸入數(shù)據(jù)(設(shè)為整型)建立單鏈表,并求相鄰兩節(jié)點data值之和為最大的第一節(jié)點。例如輸入:264730(0為終止符),建立:
所求結(jié)果=4
程序結(jié)構(gòu):類型說明;建表函數(shù):Creatlist(L);求值函數(shù):Adjmax(L);main()
{變量說明;調(diào)用Creatlist(L)建表;調(diào)用Adjmax(L)求值;打印數(shù)據(jù);釋放鏈表空間;Y繼續(xù)?N中止}
上機(jī)題1:
#include#include
typedefintdatatype;//設(shè)當(dāng)前數(shù)據(jù)元素為整型typedefstructnode//節(jié)點類型{
datatypedata;//節(jié)點的數(shù)據(jù)域structnode*next;//節(jié)點的后繼指針域
}Linknode,*Link;//linknode為節(jié)點說明符,link為節(jié)點指針說明符
LinkCreatelist()//創(chuàng)立單鏈表的算法{inta,c;floatb;LinkH,P,r;//H,P,r分別為表頭,新節(jié)點和表尾節(jié)點指針H=(Link)malloc(sizeof(Linknode));//建立頭節(jié)點r=H;do{c=(fflush(stdin),scanf(\//判斷輸入的是否是整數(shù)a=(int)b;if(c!=1||a!=b||a>-2^16||a-2^16||adata=a;//存入數(shù)據(jù)
r->next=P;//新節(jié)點鏈入表尾r=P;do{c=(fflush(stdin),scanf(\//判斷輸入的是否是整數(shù)a=(int)b;if(c!=1||a!=b||a>-2^16||a-2^16||anext=NULL;//將尾節(jié)點的指針域置空return(H);//返回已創(chuàng)立的頭節(jié)點}
LinkAdjmax(LinkH)//求鏈表中相鄰兩節(jié)點data值之和為最大的第一節(jié)點的指針的算法{Linkp,p1,q;inti,j;p=p1=H->next;if(p1==NULL)return(p1);//表空返回q=p->next;if(q==NULL)return(p1);//表長=1時返回i=p->data+q->data;//相鄰兩節(jié)點data值之和while(q->next){p=q;q=q->next;//取下一對相鄰節(jié)點的指針j=p->data+q->data;if(j>i){p1=p;i=j;//取和為最大的第一節(jié)點指針}}return(p1);}
voidmain()//主函數(shù){LinkA,B,p,q;inta,b;do{printf(\請輸入一組整數(shù)(以0為終止符,數(shù)之間回車):\\n\p=A=Createlist();//創(chuàng)立新鏈表
B=Adjmax(A);//求鏈表中相鄰兩節(jié)點data值之和為最大的第一節(jié)點的指針
a=(int)(B->data);//取第一節(jié)點的data值printf(\第一節(jié)點的data值為:%d\\n\
while(p->next)//釋放鏈表空間{q=p;p=p->next;free(q);}
free(p);
printf(\是否繼續(xù)輸入下一組整數(shù):是:1,否:0\\n\scanf(\}while(b);}
上機(jī)題2.實現(xiàn)算術(shù)表達(dá)式求值程序(棧的運(yùn)用)。設(shè)操作數(shù):0,1,2,??,8,9(可擴(kuò)展);運(yùn)算符:+,—,*,/,(,),#(#號為終止)。
輸入中綴表達(dá)式,如:5+(4—2)*3#,將其轉(zhuǎn)換成后綴表達(dá)式:542—3*+#,然后計算,本例結(jié)果為11。程序結(jié)構(gòu):類型說明;兩套:Clearstack(S)、Emptystack(S)、Getstop(S)、Push(S)、Pop(S);中綴到后綴轉(zhuǎn)換的函數(shù):Mid-post(E[n],B[n]);后綴表達(dá)式求值的函數(shù):Postcount(B[n]);main(){變量說明;輸入中綴表達(dá)式,存入E[n];調(diào)用Mid-post(E,B);調(diào)用Postcount(B);打印表達(dá)式結(jié)果;Y繼續(xù)?N中止}
上機(jī)題2:
#include#include#includetypedefstructnode{chardata;structnode*next;}snode,*slink;
typedefstructnode1{intdata;structnode1*next;}snode1,*slink1;
voidClearstack(slinks)//置棧空{(diào)s=NULL;}
intEmptystack(slinks)//判斷棧是否為空{(diào)if(s==NULL)return(1);//??辗祷?elsereturn(0);//棧非空返回0}
charGetstop(slinks)//取棧頂元素{if(s!=NULL)return(s->data);return(0);}
voidPush(slink*s,charx)//元素x進(jìn)棧{slinkp;p=(slink)malloc(sizeof(snode));//生成進(jìn)棧p節(jié)點p->data=x;//存入新元素p->next=*s;//p節(jié)點作為新的棧頂鏈入*s=p;}
charPop(slink*s)//出棧{charx;slinkp;if(Emptystack(*s))return(-1);//???,返回-1else{x=(*s)->data;p=*s;*s=(*s)->next;free(p);return(x);//成功}}
voidPush1(slink1*s,intx)//元素x進(jìn)棧{slink1p;
p=(slink1)malloc(sizeof(snode1));//生成進(jìn)棧p節(jié)點p->data=x;//存入新元素p->next=*s;//p節(jié)點作為新的棧頂鏈入*s=p;}
intPop1(slink1*s)//出棧{intx;slink1p;if(Emptystack1(*s))return(-1);//??眨祷?1else{x=(*s)->data;p=*s;*s=(*s)->next;free(p);return(x);//成功}}
intEmptystack1(slink1s)//判斷棧是否為空{(diào)if(s==NULL)return(1);//??辗祷?elsereturn(0);//棧非空返回0}
voidClearstack1(slink1s)//置棧空{(diào)s=NULL;}
intGetstop1(slink1s)//取棧頂元素{if(s!=NULL)return(s->data);return(0);}
intPrecede(charx,chary){inta,b;switch(x){case'#'://case'(':case'(':a=0;break;case'+':case'-':a=1;break;case'*':
case'/':a=2;break;}
switch(y){case'+':case'-':b=1;break;case'*':case'/':b=2;break;//case'(':case'(':b=3;break;}if(a>=b)return(1);elsereturn(0);}
voidMid_post(charE[],charB[])//中綴表達(dá)式B到后綴表達(dá)式E的轉(zhuǎn)換{inti=0,j=0;charx;inta;slinks=NULL;//置空棧Clearstack(s);Push(//終止符入棧do{x=B[i++];//掃描當(dāng)前表達(dá)式分量xswitch(x){case'':break;case'#':{while(!Emptystack(s)){E[j++]='';//棧非空時E[j++]=Pop(}}break;case')':{while(Getstop(s)!='('){E[j++]='';E[j++]=Pop(}//反復(fù)出棧直到遇到'('Pop(//退掉'('
}break;case'+':case'-':case'*':case'/':case'(':{while(Precede(Getstop(s),x))//棧頂運(yùn)算符(Q1)與x比較{E[j++]='';E[j++]=Pop(}//E[j++]='';Push(//Q1
}break;
case'\\0':break;
default:printf(\非法輸入!請重新輸入!\\n\}i++;}
if(B[0]=='#'){
printf(\表達(dá)式為空!請重新輸入!\\n\}
elseif(B[c-1]!='#'){
printf(\非法輸入!請重新輸入!\\n\}}
voidmain(){
inta,b,c,d;charB[100],E[100];do{do{printf(\請輸入中綴表達(dá)式:\\n\B[100]=fflush(stdin);gets(B);while(B[0]=='\\0'){B[100]=fflush(stdin);gets(B);}b=pd(B);}while(b==0);Mid_post(E,B);printf(\后綴表達(dá)式為:\\n\printf(\a=Ecount(E);printf(\結(jié)果=%d\\n\printf(\是否繼續(xù)?是:1否:0\\n\scanf(\}while(c==1);}
上機(jī)題3.實現(xiàn)鏈?zhǔn)疥犃羞\(yùn)算程序(隊列的運(yùn)用)。程序結(jié)構(gòu):
類型說明;Clearqueue(q)、Emptyqueue(q)、Enqueue(q)、Dequeue(q);main(){變量說明;
上機(jī)題3:
#include#include#includetypedefstructnode{chardata;structnode*next;}Qnode,*Qlink;typedefstruct{Qnode*front,*rear;}linkqueue;
voidClearqueue(linkqueue*q)//清空隊列{q->front->next=NULL;q->rear=q->front;}
voidCreatqueue(linkqueue*q)//創(chuàng)立隊列{q->front=(Qlink)malloc(sizeof(Qnode));q->front->next=NULL;q->rear=q->front;
}
}
intEmptyqueue(linkqueue*q)//判斷隊列是否為空{(diào)if(q->front==q->rear)return(1);elsereturn(0);}
voidEnqueue(linkqueue*q,chare)//元素進(jìn)隊{Qlinkp;p=(Qlink)malloc(sizeof(Qnode));p->data=e;p->next=NULL;q->rear->next=p;q->rear=p;}
charDequeue(linkqueue*q)//元素出隊{Qlinkp;if(Emptyqueue(q))return(NULL);else{p=q->front;q->front=p->next;free(p);return(q->front->data);}}
voidmain(){chara,b;intc;linkqueueq;Creatqueue(do{a=getchar();switch(a){case'0':{if(Emptyqueue(printf(\出隊\\n\printf(\請繼續(xù)輸入!\\n\}}break;case'@':{if(Emptyqueue(printf(\}printf(\return;}}break;case'\\n':break;default:{Enqueue(c=1;}break;}}while(c);}
上機(jī)題4.設(shè)電文字符集D及各字符出現(xiàn)的概率F如下:D={a,b,c,d,e,f,g,h}(字符數(shù)n=8)F={5,29,7,8,14,23,3,11}(%)編寫完成以下功能的程序:①構(gòu)造關(guān)于F的Huffman樹;②求出并打印D總各字符的Huffman編碼。程序結(jié)構(gòu):類型說明;構(gòu)造Huffman樹的函數(shù):Huffman_tree(H[m+1]);求Huffman編碼的函數(shù):Huffman_code(code[n+1]);main(){變量說明;輸入字符集D及頻率F;調(diào)用Huffman_tree(H);調(diào)用Huffman_code(code);打印編碼;
Y繼續(xù)?N中止}
上機(jī)題4:
#include#definen20
#definem2*n-1//H樹的節(jié)點數(shù)#definemax99typedefstruct{intwi;chardata;intparent,Lchild,Rchild;}huffm;
voidHuffman_tree(huffmHT[],intF[],intp,intq){inti,j,p1,p2;intw,s1,s2;for(i=1;idata.w;i++)printf(\//elsebreak;printf(\}
voidinorder(BSPT){inti;if(T){inorder(T->Lchild);visit(T);inorder(T->Rchild);}//printf(\}
voidmain(){inta;
charA[150];do{a=0;printf(\請輸入一句英文!(以.終止)\\n\gets(A);do{//scanf(\if(A[0]=='.')printf(\句子為空!請重新輸入!\\n\gets(A);}while(A[0]=='.');BSPT;T=CreateBst(A);printf(\遍歷輸出:\\n\inorder(T);printf(\printf(\是否繼續(xù)?是:1否:0\scanf(\}while(a);
}*/
/*#includedata.key,p->data.key)==0){free(S);return(T);}
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年香港建筑工程合同正規(guī)范本全面定制版3篇
- 2025版新編國際商務(wù)日語談判專業(yè)書籍出版合同
- 《水滸傳》中考題集后附答案
- 商場超市春節(jié)促銷方案范文5篇
- 二零二五年度城市垃圾收集點保潔服務(wù)承包協(xié)議4篇
- 上海地區(qū)二手房交易過戶具體合同版B版
- 2025版城市道路綠化帶除草與美化合同3篇
- 基于二零二五年標(biāo)準(zhǔn)的質(zhì)量檢測與認(rèn)證服務(wù)合同2篇
- 二零二五版旅行社與旅游保險公司的合作保險協(xié)議4篇
- 2025版?zhèn)€人車輛抵押債權(quán)債務(wù)處理專項協(xié)議4篇
- 小兒甲型流感護(hù)理查房
- 霧化吸入療法合理用藥專家共識(2024版)解讀
- 2021年全國高考物理真題試卷及解析(全國已卷)
- 拆遷評估機(jī)構(gòu)選定方案
- 趣味知識問答100道
- 鋼管豎向承載力表
- 2024年新北師大版八年級上冊物理全冊教學(xué)課件(新版教材)
- 人教版數(shù)學(xué)四年級下冊核心素養(yǎng)目標(biāo)全冊教學(xué)設(shè)計
- JJG 692-2010無創(chuàng)自動測量血壓計
- 三年級下冊口算天天100題(A4打印版)
- CSSD職業(yè)暴露與防護(hù)
評論
0/150
提交評論