freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結構的c語言算法(編輯修改稿)

2024-07-14 06:58 本頁面
 

【文章內(nèi)容簡介】 urn 0。 } else { sttop++。 stdata[sttop]=x。 return 1。 }}int pop(stack *st,elemtype *x)/*退棧*/{ if(sttop==0) { printf(棧下溢出\n)。 return 0。 } else { *x=stdata[sttop]。 sttop。 return 1。 }}int empty(stack *st)/*判斷棧空*/{ if(sttop==0) return 1。 else return 0。}int gettop(stack *st,elemtype *x)/*獲取棧頂元素*/{ if(sttop==0) { printf(棧下溢出\n)。 return 0。 } else { *x=stdata[sttop]。 return 1。 }}void disp(stack *st)/*輸出棧的所有元素*/{ int i。 for(i=sttop。i0。i) printf(%d ,stdata[i])。 printf(\n)。}/**//*假設一個算術表達式中可以包含三種括號,圓括號(和)、方括號[和]和花括號{和},且這三種括號可按任意的次序嵌套使用(如:..[..{..}..[..]..]..[..]..(..)..).編寫判別給定表達式中所含括號是否正確配對出現(xiàn)的算法(已知表達式已存入數(shù)據(jù)元素為字符的順序表中*//*輸入:{a+[b+(c+d)+e]+f}*/includeincludeint correct(char *str){ stack st。 char x。 int i,ok=1。 init(amp。st)。 for(i=0。str[i]!=39。\039。i++) { switch(str[i]) { case39。(39。:push(amp。st,39。(39。)。break。 case39。[39。:push(amp。st,39。[39。)。break。 case39。{39。:push(amp。st,39。{39。)。break。 case39。)39。:if(!(pop(amp。st,amp。x)amp。amp。x==39。(39。)) ok=0。break。 case39。]39。:if(!(pop(amp。st,amp。x)amp。amp。x==39。[39。)) ok=0。break。 case39。}39。:if(!(pop(amp。st,amp。x)amp。amp。x==39。{39。)) ok=0。break。 } if(!ok) break。 } if(empty(amp。st)amp。amp。ok) return 1。 else return 0。}void main(){ char *str。 str=(char*)malloc(100*sizeof(char))。 printf(str: )。 scanf(%s,str)。 if(correct(str)) printf(表達式括號匹配\n)。 else printf(表達式括號不匹配\n)。 getch()。}includedefine MaxLen 100int trans(char str[],char exp[]){ int st[MaxLen]。/*作為棧使用*/ char ch。 int i=0,t=0,top=1。/*t作為exp的下標,top作為st的下標,i作為str的下標*/ while((ch=str[i++])!=39。\039。) { if(ch=39。039。 amp。amp。 ch=39。939。)/*判斷為數(shù)字*/ { exp[t]=ch。t++。 while ((ch=str[i++])!=39。\039。 amp。amp。 ch=39。039。 amp。amp。 ch=39。939。) { exp[t]=ch。t++。 } i。 exp[t]=39。39。t++。 } else if(ch==39。(39。)/*判斷為左括號*/ { top++。st[top]=ch。 } else if(ch==39。)39。)/*判斷為右括號*/ { while(st[top]!=39。(39。) { exp[t]=st[top]。top。t++。 } top。 } else if(ch==39。+39。||ch==39。39。)/*判斷為加減號*/ { while(top=0 amp。amp。 st[top]!=39。(39。) { exp[t]=st[top]。top。t++。 } top++。st[top]=ch。 } else if(ch==39。*39。||ch==39。/39。) { while (st[top]==39。*39。 || st[top]==39。/39。) { exp[t]=st[top]。top。t++。 } top++。st[top]=ch。 } } while(top=0) { exp[t]=st[top]。t++。top。 } exp[t]=39。\039。 return 1。}int pvalue(char exp[],int *n){ int st[MaxLen],d。/*作為棧使用*/ char ch。 int t=0,top=1。/*t作為exp的下標,top作為st的下標*/ while ((ch=exp[t+1])!=39。\039。) { if(ch=39。039。 amp。amp。 ch=39。939。)/*為數(shù)字字符時轉(zhuǎn)換為數(shù)字*/ { d=0。 do { d=10*d+ch39。039。 }while((ch=exp[t++])!=39。39。)。 top++。st[top]=d。/*數(shù)字進棧*/ } else /*為運算符時,計算并退棧*/ { switch(ch) { case39。+39。:st[top1]=st[top1]+st[top]。break。 case39。39。:st[top1]=st[top1]st[top]。break。 case39。*39。:st[top1]=st[top1]*st[top]。break。 case39。/39。:if(st[top]!=0) st[top1]=st[top1]/st[top]。 else return 0。/*除0錯誤*/ break。 } top。 } } (*n)=st[top]。 return 1。}void main(){ char str[MaxLen]。/*存儲原算術表達式*/ char exp[MaxLen]。/*存儲轉(zhuǎn)換成的波蘭表達式*/ int n。 printf(算術表達式: )。 scanf(%s,amp。str)。 if(trans(str,exp)==0) printf(原算術表達式不正確\n)。 else { printf(波蘭表達式: %d\n,exp)。 if(pvalue(exp,amp。n)==1) printf(計算結果: %d\n,n)。 else printf(計算錯誤\n)。 }}/*已知Ackerman函數(shù)的定義如下:Akm(m,n)=n+1(m=0),akm(m1,1)(m!=0,n=0) akm(m1),akm(m,n1))(m!=0,n!=0);2。寫出非遞歸算法;3。根據(jù)非遞歸算法,畫出求akm(2,1)時棧的變化過程*/includedefine MaxLen 5000/*此數(shù)應足夠大,因為m和n值的較小增長會引起函數(shù)值的極快增長,用的棧的空間也很大*/int f1(int m,int n){ if(m==0) return n+1。 else if(n==0) return f1(m1,1)。 else return f1(m1,f1(m,n1))。}int no(int m,int n){ if(m==0) return 1。 else if(n==0) return 2。 else return 3。}int f2(int m,int n){ int st[MaxLen][4],top=1,m1,n1。 st[top][0]=no(m,n)。 st[top][1]=0。/*初值0進棧*/ st[top][2]=m。/*初值m進棧*/ st[top][3]=n。/*初值n進棧*/ do /*開始循環(huán)*/ { if(st[top][1]==0) { if(st[top][0]==3) { top++。 st[top][1]=0。 st[top][2]=st[top1][2]。 st[top][3]=st[top1][3]1。 st[top][0]=no(st[top][2],st[top][3])。 } else if(st[top][0]==2) { top++。 st[top][1]=0。 st[top][2]=st[top1][2]1。 st[top][3]=1。 st[top][0]=no(st[top][2],st[top][3])。 } if(st[top][0]==1) st[top][1]=st[top][3]+1。 } if(top=1amp。amp。st[top][1]!=0amp。amp。st[top1][0]==2) { st[top1][1]=st[top][1]。 top。 } else if(top=1amp。amp。st[top][1]!=0amp。amp。st[top1][0]==3) { n1=st[top][1]。 m1=st[top1][2]1。 top。 st[top][1]=0。 st[top][2]=m1。 st[top][3]=n1。 st[top][0]=no(st[top][2],st[top][3])。 } if(top==1amp。amp。st[top][1]!=0)/*棧中已有一個元素,且已計算出值,則退出循環(huán)*/ break。 }while(top=1)。 return (st[1][1])。}void main(){ int n,m。 printf(input m n:)。 scanf(%d %d,amp。m,amp。n)。 printf(digui c(%d,%d)=%d\n,m,n,f1(m,n))。 printf(feidigui c(%d,%d)=%d\n,m,n,f2(m,n))。 system(pause)。}/*輸入:3 8回車digui c(3,8)=2045feidigui c(3,8)=2045*//*假設以帶頭結點的循環(huán)鏈表表示隊列,并且只設一個指針指向隊尾結點(注意不設頭指針),試編寫相應的隊列初始化、入隊列和出隊列的算法*/includedefine MaxSize 6typedef char queue[MaxSize]。int rear=0,len=0。/*隊列初態(tài)*/int enqueue(queue qu,char x){ if(len==MaxSize)/*隊滿,上溢出*/ return 0。 else { rear=(rear+1)%MaxSize。 qu[rear]=x。 len++。/*隊列長度增1*/ return 1。 }}int dequeue(queue qu,char *x){ int front。 if(len==0)/*隊列為空時下溢出*/ return 0。 else { front=(rearlen+1+MaxSize)%MaxSize。 *x=qu[front]。 len。/*隊列長度減1*/ return 1。 }}void main(){ char x。 queue qu。 printf(a入隊\n)。 enqueue(qu,39。a39。)。 printf(b入隊\n)。 enqueue(qu,39。b39。)。 printf(c入隊\n)。 en
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1