版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)實驗與實訓教程程序代碼(清華高職高職第3版)預備實驗復數(shù)ADT及其實現(xiàn)復數(shù)ADT實現(xiàn)的源程序#include<stdio.h>#include<stdlib.h>/*存儲表示,結(jié)構(gòu)體類型的定義*/typedefstruct{floatx;/*實部子域*/floaty;/*虛部的實系數(shù)子域*/}comp;/*全局變量的說明*/compa,b,a1,b1;intz;/*子函數(shù)的原型聲明*/voidcreat(comp*c);voidoutputc(compa);compadd(compk,comph);/*主函數(shù)*/main(){creat(&a);outputc(a);creat(&b);outputc(b);a1=add(a,b);outputc(a1);}/*main*//*創(chuàng)建一個復數(shù)*/voidcreat(comp*c){floatc1,c2;printf("輸入實部realx=?");scanf("%f",&c1);printf("輸入虛部xvpuy=?");scanf("%f",&c2);(*c).x=c1;c->y=c2;}/*creat*//*輸出一個復數(shù)*/voidoutputc(compa){printf("\n%f+%fi\n\n",a.x,a.y);}/*求兩個復數(shù)相加之和*/compadd(compk,comph){compl;l.x=k.x+h.x;l.y=k.y+h.y;return(l);}/*add*/實驗1線性表的基本操作程序1:題1線性表基本操作函數(shù)#include<stdio.h>#include<stdlib.h>#include<alloc.h>structLinearList /*定義線性表結(jié)構(gòu)*/{ int*list; /*存線性表元素*/ intsize; /*存線性表長度*/ intMaxSize;/*存list數(shù)組元素個數(shù)*/};typedefstructLinearListLIST;voidInitList(LIST*L,intms) /*初始化線性表*/{ if((L->list=1)==NULL){ printf("內(nèi)存申請錯誤!\n"); exit(1); }2 L->MaxSize=ms;}intInsertList(LIST*L,intitem,intrc) /*item:記錄值rc:插入位置*/{inti; if(3) /*線性表已滿*/ return-1; if(rc<0) /*插入位置為0*/ rc=0; if(4) rc=L->size; for(i=L->size-1;i>=rc;i--) /*將線性表元素后移*/ 5 L->list[rc]=item; L->size++; return0;}voidOutputList(LIST*L) /*輸出線性表元素*/{ inti; for(i=0;6i++) printf("%d",L->list[i]);printf("\n");}intFindList(LIST*L,intitem) /*返回>=0為元素位置-1沒找到*/{ inti; for(i=0;i<L->size;i++) if(7) /*找到相同的元素,返回位置*/ returni; return-1; /*沒找到*/}intDeleteList1(LIST*L,intitem) /*刪除指定元素值的線性表記錄,返回>=0:刪除成功*/{ inti,n; for(i=0;i<L->size;i++) if(item==L->list[i]) /*找到相同的元素*/ break; if(i<L->size){ for(n=i;n<L->size-1;n++) L->list[n]=L->list[n+1]; L->size--; returni; }return-1;}intDeleteList2(LISTL,intrc) /*刪除指定位置的線性表記錄*/{8/*編寫刪除指定位置的線性表記錄子程序*/}程序2:題2voidmain(){ LISTLL;inti,r; printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize); InitList(&LL,100); printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize); while(1) { printf("請輸入元素值,輸入0結(jié)束插入操作:"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&i); if(1) break; printf("請輸入插入位置:"); scanf("%d",&r); InsertList(2); printf("線性表為:"); 3 } while(1) { printf("請輸入查找元素值,輸入0結(jié)束查找操作:"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&i); if(i==0) break; r=4if(r<0) printf("沒找到\n"); else printf("有符合條件的元素,位置為:%d\n",r+1); } while(1) { printf("請輸入刪除元素值,輸入0結(jié)束查找操作:"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&i); if(i==0) break; r=5if(r<0) printf("沒找到\n"); else{ printf("有符合條件的元素,位置為:%d\n線性表為:",r+1); OutputList(&LL);} } while(1) { printf("請輸入刪除元素位置,輸入0結(jié)束查找操作:"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&r); if(r==0) break; i=6if(i<0) printf("位置越界\n"); else{ printf("線性表為:"); OutputList(&LL);} }}程序4:題4#defineX10#defineY30#defineN20intA[N]={2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,80,5};#include<stdio.h>voiddel(int*A,int*n,intx,inty){ inti,j; for(i=j=0;i<*n;i++) if(A[i]>y||A[i]<x) //不在x到y(tǒng)之間,則保留 1;2=j;}voidoutput(int*A,intn){ inti; printf("\n數(shù)組有%d個元素:\n",n); for(i=0;i<n;i++){ printf("%7d",A[i]); if((i+1)%10==0) printf("\n"); }printf("\n");}voidmain(){ intn; n=N; output(A,n);3;output(A,n);}實驗2鏈表的基本操作程序1:題1鏈表基本操作函數(shù)#include<stdio.h>#include<malloc.h>typedefstructlist{ intdata; structlist*next;}LIST;voidInitList(LIST**p) /*初始化鏈表*/{1/*編寫初始化鏈表子程序*/}voidInsertList1(LIST**p,intitem,intrc)/*向鏈表指定位置[rc]插入元素[item]*/{inti; LIST*u,*q,*r; /*u:新結(jié)點q:插入點前驅(qū)r:插入點后繼*/ u=(LIST*)malloc(sizeof(LIST)); u->data=item; for(i=0,r=*p;2;i++){ q=r; r=r->next; } if(3) /*插入首結(jié)點或p為空指針*/ *p=u; else 4u->next=r;}voidInsertList2(LIST**p,intitem) /*向有序鏈表[p]插入鍵值為[item]的結(jié)點*/{ LIST*u,*q,*r; /*u:新結(jié)點q:插入點前驅(qū)r:插入點后繼*/ u=(LIST*)malloc(sizeof(LIST)); u->data=item; for(r=*p;5&&r->data<item;q=r,r=r->next) ; /*從鏈表首結(jié)點開始順序查找*/ if(r==*p) /*插入首結(jié)點或p為空指針*/ 6 else q->next=u;u->next=r;}/*刪除鍵值為[item]的鏈表結(jié)點,返回0:刪除成功1:沒找到*/intDeleteList(LIST**p,intitem){ LIST*q,*r; /*q:結(jié)點前驅(qū)r:結(jié)點后繼*/ q=*p;r=q; if(q==NULL) /*鏈表為空*/ return1; if(q->data==7){ /*要刪除鏈表首結(jié)點*/ *p=q->next; /*更改鏈表首指針*/ 8 /*釋放被刪除結(jié)點的空間*/ return0; /*刪除成功*/ } for(;9&&10;r=q,q=q->next) ; /*尋找鍵值為[item]的結(jié)點*/ if(q->data==item){ /*找到結(jié)點*/ r->next=q->next; /*被刪結(jié)點從鏈表中脫離*/ free(q); /*釋放被刪除結(jié)點的空間*/ return0; /*刪除成功*/ }return1; /*沒有指定值的結(jié)點,刪除失敗*/}/*查找鍵值為[item]的鏈表結(jié)點位置,返回>=1:找到-1:沒找到*/intFindList(LIST*p,intitem){ inti; for(i=1;p->data!=item&&p!=NULL;11,i++) ; /*查找鍵值為[item]的結(jié)點*/ return(p==NULL)?-1:i; /*找到返回[i]*/}voidOutputList(LIST*p) /*輸出鏈表結(jié)點的鍵值*/{ while(12){ printf("%4d",p->data); p=p->next; /*遍歷下一個結(jié)點*/}}voidFreeList(LIST**p) /*釋放鏈表空間*/{ LIST*q,*r; for(q=*p;q!=NULL;){ 13 q=q->next; 14 } *p=NULL; /*將鏈表首指針致空*/}程序2:題2voidmain(){LIST*p; intop,i,rc;InitList(&p); /*初始化鏈表*/while(1) { printf("請選擇操作1:指定位置追加2:升序追加3:查找結(jié)點\n"); printf("4:刪除結(jié)點5:輸出結(jié)點6:清空鏈表0:退出\n"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&op); switch(op){ case0: /*退出*/ return-1; case1: /*指定位置追加結(jié)點*/ printf("請輸入新增結(jié)點鍵值和位置:"); scanf("%d%d",&i,&rc); 1; break; case2: /*按升序追加結(jié)點*/ printf("請輸入新增結(jié)點鍵值:"); scanf("%d",&i); InsertList2(&p,i); break; case3: /*查找結(jié)點*/ printf("請輸入要查找結(jié)點的鍵值:"); scanf("%d",&i); rc=2; if(rc>0) printf("位置為[%d]\n",rc); elseprintf("沒找到\n"); break; case4: /*刪除結(jié)點*/ printf("請輸入要刪除結(jié)點的鍵值:"); scanf("%d",&i); rc=3; if(rc==0) printf("刪除成功\n",rc); elseprintf("沒找到\n"); break; case5: /*輸出結(jié)點*/ printf("\n鏈表內(nèi)容為:\n"); 4; break; case6: /*清空鏈表*/ 5;break; } }}程序3:題3#include<stdio.h>#include<alloc.h>typedefstructnode{ intx; structnode*next;}NODE;voidinput(NODE**a){ NODE*p,*q;inti; printf("請輸入鏈表的元素,-1表示結(jié)束\n");*a=NULL; while(1){ scanf("%d",&i); if(i==-1) break; p=(NODE*)malloc(sizeof(NODE)); p->x=i; p->next=NULL; if(*a==NULL) *a=q=p; else{ q->next=p; q=q->next; } }}voidoutput(NODE*a){ inti; for(i=0;a!=NULL;i++,a=a->next){ printf("%7d",a->x); if((i+1)%10==0) printf("\n"); }printf("\n");}voiddisa(NODE*a,NODE**b){ NODE*r,*p,*q; p=a; r=*b=(a==NULL)?NULL:a->next; //如果鏈表a為空,則鏈表b也為空 while(1&&2){ q=p->next; //q指向偶數(shù)序號的結(jié)點 3//將q從原a鏈表中刪除 r->next=q; //將q結(jié)點加入到b鏈表的末尾 4 //r指向b鏈表的最后一個結(jié)點 p=p->next; //p指向原a鏈表的奇數(shù)序號的結(jié)點 } r->next=NULL; //將生成b鏈表中的最后一個結(jié)點的next域置空}voidmain(){ NODE*a,*b; input(&a); printf("鏈表a的元素為:\n"); output(a);5 printf("鏈表a的元素(奇數(shù)序號結(jié)點)為:\n"); output(a); printf("鏈表b的元素(偶數(shù)序號結(jié)點)為:\n"); output(b);}實驗3棧的基本操作程序1:題1棧的基本操作函數(shù)#include<stdio.h>#defineMAXN10 /*棧的最大容量*//*定義棧的類型為int*/intpush(int*stack,intmaxn,int*toppt,intx) /*進棧函數(shù)*/{ if(*toppt>=maxn) /*1*/ return1; 2 /*元素進棧*/ ++(*toppt); /*棧頂指針+1*/return0; /*進棧成功*/}intpop(int*stack,int*toppt,int*cp) /*出棧函數(shù)*/{ if(3) /*棧空,出棧失敗,返回1*/ return1; --(*toppt); /*棧頂指針-1*/ 4 return0; /*出棧成功*/}voidOutputStack(int*stack,inttoppt) /*輸出棧元素*/{ inti; for(i=5;i>=0;i--) printf("%d",stack[i]); printf("\n");}程序2:題2主函數(shù)voidmain(){ ints[MAXN],i; /*定義棧*/ inttop=0; /*設置為空棧*/intop;while(1) { printf("請選擇操作,1:進棧2:出棧0:退出"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&op); switch(op){ case0: /*退出*/ return; case1: /*進棧*/ printf("請輸入進棧元素:"); scanf("%d",&i); if(1){ /*進棧成功*/ printf("進棧成功,棧內(nèi)元素為:\n"); OutputStack(s,top); } else printf("棧滿\n");break; case2: /*出棧*/ if(2){ /*出棧成功*/ printf("出棧元素為:[%d],棧內(nèi)元素為:\n",i); 3 } else printf("??誠n"); break; } }}程序3:題3配對函數(shù)intcorrect(char*exp,intmax) /*傳入?yún)?shù)為表達式、表達式長度,返回0:成功,返回1:錯誤*/{ intflag=0; /*括號匹配標志,0:正確*/ chars[MAXN]; /*定義棧*/ inttop=0; /*棧指針為0,表示空棧*/charc; inti; for(i=0;1;i++){ /*循環(huán)條件為表達式未結(jié)束且括號匹配*/ if(exp[i]=='('||exp[i]=='['||exp[i]=='{'} push(s,MAXN,&top,exp[i]); if(exp[i]==')'||exp[i]==']'||exp[i]=='}'){/*遇到},},},出棧*/ 2 /*置出棧結(jié)果,棧空出錯*/ if((exp[i]==')'&&c!='(')||(exp[i]==']'&&c!='[') ||(exp[i]=='}'&&c!='{')) /*括號不匹配*/ flag=1;} } if(3) /*棧不為空,表明還有(,[,{符號沒匹配*/ flag=1;returnflag;}voidmain(){ chars[MAXN],c; /*定義棧*/charexp[1024]; inttop=0; /*設置為空棧*/ while(1){ printf("請輸入表達式,輸入0退出:"); gets(exp); /*從標準輸入中讀取表達式*/ exp[MAXN]='\0'; /*表達式長度<=MAXN*/ if(strcmp(exp,"0")==0) 4 if(5) printf("表達式內(nèi)容為:\n%s\n表達式括號不匹配\n",exp); else printf("表達式括號匹配\n");}}程序4:題4波蘭表達式#include<stdio.h>#include<alloc.h>#defineMAXN100 /*棧的最大容量*/intpushc() /*char型元素進棧函數(shù)*/{ /*編寫進棧子程序*/}intpopc(char*stack,int*toppt,char*cp) /*char型元素出棧函數(shù)*/{ /*編寫出棧子程序*/}
inteval() /*算術(shù)運算*/{ /*編寫算術(shù)運算子程序*/}intoperate(char*str,int*exp) /*計算后綴表達式的值,返回0:成功-1:表達式錯誤-2:棧滿*/{ charc; intopd1,opd2,temp,c1;ints[MAXN]; inti;inttop=0; for(i=0;str[i]!='\0';i++){ c=str[i]; if(c>='0'&&c<='9'){ /*數(shù)字進棧*/ c1=c-'0'; /*將字符轉(zhuǎn)換成數(shù)字值*/ if(push(s,MAXN,&top,c1)!=0){ printf("表達式太長,棧滿"); return-2; } } elseif(c=='+'||c=='-'||c=='*'||c=='/'){/*運算符*/ pop(s,&top,&opd1); if(pop(s,&top,&opd2)!=0) return-1; temp=eval(c,opd2,opd1); 1; } else return-1; } 2 /*取出結(jié)果*/ if(top!=0) /*棧非空*/ return-1; return0;}inttrans(char*sin,char*sout) /*將中綴表達式轉(zhuǎn)換成后綴,返回0:處理成功*/{ chars[MAXN],c; /*定義棧,棧元素*/ 3 /*設置為空棧*/ intoff=0; /*數(shù)組下標*/ inti; for(i=0;sin[i]!='\0';i++) /*遇到休止符,表示表達式輸入結(jié)束*/ if(sin[i]>='0'&&sin[i]<='9') /*輸入數(shù)字,進數(shù)組*/ sout[4]=sin[i]; elseswitch(sin[i]){ case'(': /*左括號,括號入棧*/ pushc(s,MAXN,&top,sin[i]); break; case')': /*右括號,將棧中左括號前的元素出棧,存入數(shù)組*/ while(1){ if(popc(s,&top,&c)!=0){ /*棧空*/ printf("表達式括號不匹配\n"); return-1;} if(c=='(') /*找到匹配的括號*/ break;sout[off++]=c; /*棧頂元素入數(shù)組*/ } break; case'+': /*為'+','-',將棧中左括號前的元素出棧,存入數(shù)組*/ case'-': while(top>0&&s[top-1]!='('){ 5 sout[off++]=c; } pushc(s,MAXN,&top,sin[i]); /*'+','-'符號入棧*/ break; case'*': /*為'*','/',將棧頂'*','/'符號出棧,存入數(shù)組*/ case'/': while(top>0&&(s[top-1]=='*'||s[top-1]=='/')){ popc(s,&top,&c); sout[off++]=c; } /*這段循環(huán)如何用if語句實現(xiàn)?*/ pushc(s,MAXN,&top,sin[i]); /*'*','/'符號入棧*/ break; } while(6) /*所有元素出棧,存入數(shù)組*/ sout[off++]=c; sout[off]='\0'; /*加休止符*/ return0;}voidmain(){ char*sin; /*輸入表達式指針,中綴表示*/ char*sout; /*輸出表達式指針,后綴表示*/ inti; sin=(char*)malloc(1024*sizeof(char)); sout=(char*)malloc(1024*sizeof(char)); if( 7 ){ printf("內(nèi)存申請錯誤!\n"); return; } printf("請輸入表達式:"); gets(sin);if(8){ /*轉(zhuǎn)換成功*/
printf("后綴表達式為:[%s]\n",sout); switch(9 ){ case0: printf("計算結(jié)果為:[%d]\n",i); break; case-1: printf("表達式錯誤\n"); break; case-2: printf("棧操作錯誤\n"); break; }}}
實驗4隊列的基本操作程序1:題1鏈接隊列的基本操作函數(shù)#include<stdio.h>#include<alloc.h>typedefstructqueue{ /*定義隊列結(jié)構(gòu)*/ intdata; /*隊列元素類型為int*/ structqueue*link;}QUEUE;voidEnQueue(QUEUE**head,QUEUE**tail,intx) /*進隊操作*/{ QUEUE*p; p=(QUEUE*)malloc(sizeof(QUEUE)); 1 p->link=NULL; /*隊尾指向空*/ if(*head==NULL) /*隊首為空,即為空隊列*/ 2 else{ (*tail)->link=p; /*新單元進隊列尾*/ *tail=p; /*隊尾指向新入隊單元*/}}intDeQueue(QUEUE**head,QUEUE**tail,int*cp) /*出隊操作1:對空*/{ QUEUE*p;p=*head; if(*head==NULL) /*隊空*/ return1; *cp=(*head)->data; *head=3 if(*head==NULL) /*隊首為空,隊尾也為空*/ *tail=NULL; free(p); /*釋放單元*/return0;}voidOutputQueue(QUEUE*head) /*輸出隊列中元素*/{ while(4){ printf("%d",head->data); head=head->link; }printf("\n");程序2:題2主程序:voidmain(){ QUEUE*head,*tail; intop,i; head=tail=NULL; /*1*/while(1) { printf("請選擇操作,1:進隊2:出隊0:退出"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&op); switch(op){ case0: /*退出*/ return; case1: /*進隊*/ printf("請輸入進隊元素:"); scanf("%d",&i); 2; printf("隊內(nèi)元素為:\n"); OutputQueue(head); break; case2: /*出隊*/ if(3==0){ /*出隊成功*/ printf("出隊元素為:[%d],隊內(nèi)元素為:\n",i); OutputQueue(head); } else printf("隊空\n"); break; } }}程序3:題3環(huán)型隊列的基本操作函數(shù)#include<stdio.h>#include<alloc.h>#defineMAXN11 /*定義環(huán)行順序隊列的存儲長度*/intEnQueue(int*queue,intmaxn,int*head,int*tail,intx)/*進隊操作,返回1:隊滿*/{ if(1==*head) /*隊尾指針趕上隊首指針,隊滿*/ return1;*tail=2 /*隊尾指針+1*/ queue[*tail]=x; /*元素入對尾*/return0;}intDeQueue(int*queue,intmaxn,int*head,int*tail,int*cp)/*出隊操作返回1:隊空*/{ if(*head==*tail) /*隊首=隊尾,表明隊列為空*/ return1; *head=(*head+1)%maxn; /*隊首指針+1*/3 /*取出隊首元素*/return0;}voidOutputQueue(int*queue,intmaxn,inth,intt) /*輸出隊列中元素*/{ while(4){ /**/ h=(h+1)%maxn; printf("%d",queue[h]); }printf("\n");}程序4:題4主程序:voidmain(){ intq[MAXN]; /*假設環(huán)行隊列的元素類型為int*/ intq_h=0,q_t=0; /*初始化隊首,隊尾指針為0*/intop,i; while(1) { printf("請選擇操作,1:進隊2:出隊0:退出"); fflush(stdin); /*清空標準輸入緩沖區(qū)*/ scanf("%d",&op); switch(op){ case0: /*退出*/ return; case1: /*進隊*/ printf("請輸入進隊元素:"); scanf("%d",&i); if( 1!=0) printf("隊列滿\n");else{ printf("入隊成功,隊內(nèi)元素為:\n"); OutputQueue(q,MAXN,q_h,q_t);} break; case2: /*出隊*/ if(2==0){/*出隊成功*/ printf("出隊元素為:[%d],隊內(nèi)元素為:\n",i); OutputQueue(q,MAXN,q_h,q_t); } else printf("隊空\n"); break; } }}程序5:題5醫(yī)務室模擬程序#include<stdio.h>#include<stdlib.h>#include<alloc.h>typedefstruct{ intarrive; /*病人到達時間*/ inttreat; /*病人處理時間*/}PATIENT;typedefstructqueue{ /*定義隊列結(jié)構(gòu)*/ PATIENTdata; /*隊列元素類型為int*/ structqueue*link;}QUEUE;voidEnQueue(QUEUE**head,QUEUE**tail,PATIENTx) /*進隊操作*/{ /*編寫進隊操作子程序*/}intDeQueue(QUEUE**head,QUEUE**tail,PATIENT*cp) /*出隊操作1:對空*/{/*編寫出隊操作子程序*/}voidOutputQueue(QUEUE*head) /*輸出隊列中元素*/{ while(1){ printf("到達時間:[%d]處理時間:[%d]\n",head->data.arrive,head->data.treat); head=head->link; }}voidInitData(PATIENT*pa,intn) /*生成病人到達及處理時間的隨機數(shù)列*/{ intparr=0; /*前一個病人到達的時間*/inti; for(i=0;i<n;i++){ pa[i].arrive=parr+random(15); /*假設病人到達的時間間隔為0~14*/ pa[i].treat=random(9)+1; /*假設醫(yī)生處理時間為1~9*/ parr=pa[i].arrive;printf("第[%d]個病人到達時間為[%d]處理時間為[%d]\n",i+1,parr,pa[i].treat);}}voidmain(){ QUEUE*head,*tail;PATIENT*p,curr; /*病人到達及處理時間信息,當前出隊病人信息*/ intn,i,finish; intnowtime; /*時鐘*/ intdwait,pwait; /*醫(yī)生累計等待時間,病人累計等待時間*/ head=tail=NULL; /*將隊列頭和尾置為空*/while(1) { n=0;nowtime=dwait=pwait=0; printf("請輸入病人總數(shù)(1~20),=0:退出"); scanf("%d",&n); if(n==0) /*退出*/ return; if(n>20||n<0) continue;
if((p=(PATIENT*)malloc(n*sizeof(PATIENT)))==2){ printf("內(nèi)存申請錯誤\n");
return;} 3/*生成病人到達及處理時間的隨機數(shù)列*/ for(i=0;4;){/*病人到達未結(jié)束或還有等待,處理*/ if(head==NULL){ /*等待隊列為空*/ if(p[i].arrive-nowtime>0)/*病人到達時間與上次處理時間遲*/ 5 /*累計醫(yī)生等待時間*/ nowtime=p[i].arrive; /*時鐘推進*/ 6 /*病人入隊*/ } DeQueue(&head,&tail,&curr); /*出隊一位病人*/ 7 /*累計病人等待時間*/ finish=nowtime+curr.treat; /*當前病人處理結(jié)束時間*/ while(i<n&&p[i].arrive<=finish) /*下一位病人到達時間在當前病人等待時間結(jié)束之前,入隊*/ 8 nowtime=finish; /*時鐘推進到當前病人處理結(jié)束時間*/ }
free(p); /*釋放空間*/ printf("醫(yī)生等待時間[%d],病人平均等待時間[%.2f]\n",dwait,(float)pwait/n); }}程序6:題6招聘程序#include<stdio.h>#include<stdlib.h>#include<alloc.h>#defineDEMARK5 /*按第二批錄用的扣分成績*/typedefstructstu{ /*定義招聘人員信息結(jié)構(gòu)*/ intno,total,z[2],sortm,zi; /*編號,總成績,志愿,排除成績,錄取志愿號*/ structstu*next;}STU;typedefstructjob{ intlmt,count; /*計劃錄用人數(shù),已錄用人數(shù)*/ STU*stu; /*錄用者有序隊列*/}JOB;STU*head=NULL,*over=NULL;intall;voidOutPutStu(STU*p) /*輸出應聘人員有序隊列中編號和成績*/{ for(;1;p=p->next) printf("%d(%d)\t",p->no,p->total);}voidFreeStu(STU**p) /*釋放應聘人員空間*/{ STU*q; while(*p!=NULL){ q=*p; 2 free(q);}}voidInsert(STU**p,STU*u) /*按排除成績從大到小順序插隊*/{ STU*v,*q; /*插隊元素的前后元素指針*/ for(q=*p;q!=NULL;v=q,q=q->next) if(3) /*隊中工人成績<插入元素成績*/ break; if(q==*p) /*插入到隊首*/ *p=u; else /*不為隊首插入*/ 4 u->next=q; /*新元素的后繼元素指針*/}intInitJob(JOB**h,intn,int*all) /*隨機生成工種信息*/{ inti;JOB*p; *all=0;printf("工種信息{工種號(計劃招聘人數(shù))}\n"); if((p=(JOB*)malloc(n*sizeof(JOB)))==NULL){ printf("內(nèi)存申請錯誤!\n"); return-1; } for(i=0;i<n;i++){ p[i].lmt=random(10)+1; /*假設工種招聘人數(shù)為1~10*/ p[i].count=0;p[i].stu=NULL; *all+=p[i].lmt;printf("%d(%d)\t",i,p[i].lmt); } printf("\n總招聘人數(shù)[%d]\n",*all); *h=p;return0;}intInitStu(STU**h,intn,intm) /*隨機生成應聘人員信息*/{ STU*p; inti;printf("應聘人員信息{編號,成績,志愿1,志愿2}\n"); for(i=0;i<n;i++){ if((p=(STU*)malloc(sizeof(STU)))==NULL){ printf("內(nèi)存申請錯誤!\n"); return-1;} p->no=i; p->total=p->sortm=random(201); p->z[0]=random(m); /*應聘人員第一志愿0~m-1*/ p->z[1]=random(m); /*應聘人員第二志愿0~m-1*/ p->zi=0; /*錄取志愿初始化為0,即第一志愿*/ printf("%d,%3d,%d,%d\t",i,p->total,p->z[0],p->z[1]);Insert(h,p); } printf("\n");return0;}voidmain(){ intm; /*工種總數(shù),編號為0~M-1*/ intn; /*應聘人員總數(shù)*/ JOB*rz; intall; /*計劃招聘人員總數(shù)*/ STU*head=NULL,*over=NULL; /*應聘人員隊列,落聘人員隊列*/ STU*p;inti; while(1) { m=n=0; printf("請輸入工種總數(shù)(1~20),=0:退出"); scanf("%d",&m); if(m==0) /*退出*/ return; if(m>20||m<0) continue; if(5!=0) /*生成工種信息*/ return; printf("\n請輸入應聘人員總數(shù)(5~400),=0:退出"); scanf("%d",&n); if(n==0) /*退出*/ return; if(n<5||n>400){ free(rz); /*釋放工種信息空間*/ continue;} if(6!=0) /*生成應聘人員信息*/ return;printf("\n應聘人員隊列\(zhòng)n"); OutPutStu(head); While(7){ /*當人員沒招滿且隊列不為空*/ p=head; /*取應聘人員隊首指針*/ head=head->next; /*隊首指針下移*/ i=p->z[p->zi]; /*取該應聘人員的應聘工種號*/ if(rz[i].count<rz[i].lmt){ /*該工種人員沒招滿*/ rz[i].count++; 8 all--; continue; } if(p->zi>=1){ p->next=over; /*該工人入落聘者隊列*/ over=p; continue; } p->sortm-=DEMARK; /*該工種已招滿,工人分數(shù)降檔*/ p->zi=1; /*該工人改為第二志愿*/ 9 /*10*/ } for(i=0;i<m;i++){ /*打印各工種招聘情況*/ printf("\n工種[%d]招聘情況\n",i); OutPutStu(rz[i].stu); printf("\n"); } printf("\n落聘人員\n"); OutPutStu(head); OutPutStu(over); printf("\n"); for(i=0;i<m;i++) /*釋放各工種招聘人員空間*/ FreeStu(&rz[i].stu); 11 /*釋放落聘人員空間*/ FreeStu(&over); /*釋放落聘人員空間*/ free(rz); /*釋放工種信息空間*/ }}實驗5數(shù)組的基本操作程序1:題1Fibonacci數(shù)列#include<stdio.h>#defineMAX20voidmain(){ inti; intfib[MAX]; fib[0]=0; fib[1]=1; for(i=2;i<MAX;i++) fib[i]=fib[i-1]+fib[i-2]; for(i=0;i<MAX;i++) /*輸出格式:每個數(shù)字以TAB鍵分隔,5個為一行*/ printf("%d%c",fib[i],(i%5)==4?'\n':'\t');}程序2:題2數(shù)組操作#include<stdio.h>#defineMAX5voidmain(){ inti,j,n=1; inta[MAX][MAX]; for(i=0;1;i++) for(j=0;j<MAX;j++) 2; for(i=0;i<MAX;i++){ for(j=03;;j++) printf("%d\t",a[i][j]); printf("\n"); }}程序3:題3多項式相除#include<stdio.h>#include<alloc.h>#defineMIN0.00005 /*定義近似于0的值*//*已知兩多項式的系數(shù)和冪次,返回最大公因式的冪次,在*q中得到系數(shù)表的首指針*/intRemainder(double*pa,intan,double*pb,intbn,double**q){ doublex,*temp; intk,j; if(an<bn){ /*使多項式a(x)的冪次不低于多項式b(x)的冪次*/ temp=pa; 1; pb=temp; /*使pa,pb值互換*/ k=an; an=bn; bn=k; /*使an,bn值互換*/ } while(1){ while(*pb<MIN&&*pb>-MIN&&bn>0){/*忽略多項式b(x)最高次系數(shù)為0的項*/ bn--; pb++; } if(*pb<MIN&&*pb>-MIN&&2)/*多項式b(x)為0,退出循環(huán)*/ break; /*請注意浮點型變量的判斷為零方式*/ if(bn<0){ /*無最大公因式*/ *q=pb; return0;} k=0; x=*pb; while(k<=bn) /*使多項式b(x)的最高次項系數(shù)為1*/ pb[k++]/=x; for(k=0;k<=an-bn;k++){ /*求a(x)/b(x),商多項式有an-bn+1項*/ x=pa[k]; /*商多項式的當前項系數(shù)x=pa[k]*/ for(j=03;;j++) /*從a(x)中減去x*b(x)*/ 4;/*pa[k]應置0,但不再使用,故未置0*/ } temp=pa; pa=5; pb=6; /*b(x)={a(x)/b(x)后的余數(shù)多項式}*/ an=7; /*余數(shù)多項式的冪次為除數(shù)多項式冪次-1*/ } 8; returnan; /*返回多項式的冪次*/}intInput(double**p,int*n,char*note) /*多項式輸入函數(shù)*/{ inti;double*pa; printf("請輸入多項式%s的冪次,<=0退出",note); scanf("%d",n); if(*n<=0) return1; if((pa=(double*)malloc((*n+1)*sizeof(double)))==NULL){ printf("內(nèi)存申請錯誤\n");return-1; } for(i=*n;i>=0;i--){ printf("請輸入多項式%s%d次冪的系數(shù)",note,i); scanf("%lf",pa+i); } *p=pa; return0;}voidPrint(double*q,intn) /*輸出最大公因式表達式*/{ inti; for(i=n;i>=1;i--) if(q[i]>MIN||q[i]<-MIN) printf("%.4lfX%d",q[i],i); if(q[0]>MIN||q[0]<-MIN) printf("%.4lf",q[0]);printf("\n");}voidmain(){ double*pA,*pB; /*多項式A(x),B(x)的系數(shù)數(shù)組*/double*q; /*最大公因式系數(shù)*/ intAn,Bn; /*多項式A(x),B(x)的冪次*/intn; while(1){ if(9) return; if(Input(&pB,&Bn,"B(x)")!=0) return; printf("\n表達式A(x)的格式為\n"); Print(pA,An); printf("\n表達式B(x)的格式為\n"); Print(pB,Bn); n=10; printf("\n最大公因式表達式為\n"); Print(q,n); /*輸出最大公因式表達式*/ free(pA); free(pB);}}
實驗6字符串的基本操作程序1:題1字符串匹配#include<stdio.h>#include<string.h>/*簡單模式匹配算法*/intsimple_match(char*t,char*p){ intn,m,i,j,k; n=strlen(t); m=strlen(p); for(j=0;1;j++){ /*順序考察從t[j]開始的子串*/ for(i=0;2;i++) ; /*從t[j]開始的子串與字符串p比較*/ if(i==m) /*匹配成功*/ return0; }return1; /*匹配失敗*/}voidmain(){ char*s1[]={"Abcabc","Abc123ab","eeefffg"}; char*s2[]={"aBc","c123","fge"}; inti; for(i=0;i<3;i++){ printf("長字符串[%s]匹配子串[%s]",s1[i],s2[i]); if(3) printf("匹配成功\n"); else printf("匹配失敗\n");}}程序2:題2公共字符串#include<stdio.h>#include<string>intcommstr(char*str1,char*str2,int*lenpt){ intlen1,len2,ln,count,i,k,p; char*st,form[20]; if((len1=strlen(str1))<(len2=strlen(str2))){/*使str1的長度不小于str2*/ st=str1; str1=str2; str2=st; ln=len1; len1=len2; len2=ln; } count=0; for(1;ln>0;ln--){ /*找長為ln的公共子串*/ for(k=0;2;k++){ /*自str2[k]開始的長為ln的子串與str1中的子串比較*/ for(p=0;p+ln<=len1;p++){ /*str1中的子串自str1[p]開始,兩子串比較通過對應字符逐一比較實現(xiàn)*/ for(i=03;;i++) ; if(i==ln){ /*找到一個最長公共子串*/ sprintf(form,"子串%%d[%%%d.%ds]\n",ln,ln); printf(form,++count,str2+k);} } } if(4) break; } 5;returncount;}voidmain(){ intc,len; c=commstr("Abc1AbcsAbcd123","123Abc",&len);printf("共有%d個長為%d的公共子串\n",c,len);}程序3:題3排版輸出#include<stdio.h>#include<string.h>/*正文排版輸出函數(shù)s:預處理后的正文nw:單詞個數(shù)sl:單詞在s中的起始位置sn:單詞長度*/voidpaiban(char*s,intnw,int*sl,int*sn){ inti,j,n,k,lnb,ln,m,ln1,lnw;charinfo[81];ln=sn[0]; /*一行中單詞長度之和(包括每個單詞間的一個空格)*/ for(i=1,j=0;i<nw;i++){ /*循環(huán)輸出至最后一行前*/ ln1=ln+1+sn[i]; if(1) ln=ln1; else{ n=80-ln; lnw=2; /*每個單詞間隔的空格*/ lnb=3; /*按lnw個間隔排版后,還多余的空格*/ for(k=0;k<80;k++) /*將行輸出內(nèi)容初始化成全部空格*/ info[k]=''; info[8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省三明市大田縣2022-2023學年八年級下學期期中考試物理試題【含答案、解析】
- 2025年度門窗安裝與綠色建筑認證服務合同7篇
- 二零二五年度農(nóng)家樂旅游咨詢服務與導游服務合同4篇
- 二零二五年度文化旅游節(jié)慶活動策劃合同:文化旅游活動整體運營管理協(xié)議3篇
- 2025年度個人藝術(shù)品收藏與交易合同范本10篇
- 2025年地表水資源勘察合同
- 2025年貴州嘉城建設投資有限公司招聘筆試參考題庫含答案解析
- 2025年青海省青海湖旅游集團公司招聘筆試參考題庫含答案解析
- 2025年江蘇射陽天工商貿(mào)有限公司招聘筆試參考題庫含答案解析
- 2025年貴州雍泰土地開發(fā)有限公司招聘筆試參考題庫含答案解析
- 湖北省十堰市城區(qū)2024-2025學年九年級上學期期末質(zhì)量檢測綜合物理試題(含答案)
- 2024企業(yè)答謝晚宴會務合同3篇
- 高中生物選擇性必修1試題
- 電氣工程及其自動化專業(yè)《畢業(yè)設計(論文)及答辯》教學大綱
- 《客艙安全管理與應急處置》課件-第14講 應急撤離
- 中華人民共和國文物保護法
- 2025屆高考作文押題預測5篇
- 節(jié)前物業(yè)安全培訓
- 阿里巴巴國際站:2024年珠寶眼鏡手表及配飾行業(yè)報告
- 高甘油三酯血癥相關(guān)的器官損傷
- 手術(shù)室護士考試題及答案
評論
0/150
提交評論