您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 通过一个循环队列重新排列栈中元素
/*设顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n,a2n-1,...,a1,要求通过一个循环队列重新排列栈中元素,使得从栈顶到栈底的元素依次为a2n,a2n-2,...,a4,a2,a2n-1,a2n-3,...,a3,a1,请设计算法实现该操作,要求空间复杂度和时间复杂度均为O(n).*/#includestdio.h#includestdlib.h#defineMAXSIZE50typedefstruct{intdata[MAXSIZE];inttop;}SeqStack;typedefstruct{intdata[MAXSIZE];intfront;intrear;}SeqQueue;voidPrint(SeqStack*S,constn){inti=0;for(;in;i++)printf(%d,S-data[i]);printf(\n);}voidSetStack(SeqStack*S,constintn){inti=0;intx;S-top=-1;printf(请输入数据元素:\n);for(i=0;in;i++){scanf(%d,&x);S-top++;S-data[S-top]=x;//i++;}//Print(S,n);}intPopStack(SeqStack*S){intx;if(S-top=MAXSIZE-1&&S-top=0){x=S-data[S-top];S-top--;returnx;}elseexit(0);}voidPushStack(SeqStack*S,intx){if(S-topMAXSIZE-1&&S-top-1)//if(S-topMAXSIZE-1&&S-top=-1){S-top++;S-data[S-top]=x;}elseexit(0);}voidSetQueue(SeqQueue*Q,SeqStack*S,constintn){inti=0;Q-front=0;Q-rear=0;for(i=0;in;i++){Q-rear=(Q-rear+1)%MAXSIZE;Q-data[Q-rear]=PopStack(S);//i++;}//printf(\n==%d==\n,S-top);}intQueueEmpty(SeqQueue*Q){if(Q-front==Q-rear)return1;elsereturn0;}intPopQueue(SeqQueue*Q){intx;if(!QueueEmpty(Q)){x=Q-data[Q-front+1];Q-front=(Q-front+1)%MAXSIZE;returnx;}elseexit(0);}voidAddQueue(SeqQueue*Q,intx){Q-rear=(Q-rear+1)%MAXSIZE;Q-data[Q-rear]=x;}voidFun(SeqQueue*Q,SeqStack*S,constintn){inti=0;intx=0;for(;in;i++){x=PopQueue(Q);//printf(*(%d)*%d%d\n,x,i,n);if(i%2==0){PushStack(S,x);//printf(XXC);}elseAddQueue(Q,x);}while(!QueueEmpty(Q)){x=PopQueue(Q);PushStack(S,x);}}/*voidPrint(SeqStack*S,constn){inti=0;for(;in;i++)printf(%d,S-data[i]);}voidPrintQ(SeqQueue*Q,constn){inti=1;for(;i=n;i++)printf(%d,Q-data[i]);}*/voidmain(){SeqStack*S;SeqQueue*Q;intn;S=(SeqStack*)malloc(sizeof(SeqStack));Q=(SeqQueue*)malloc(sizeof(SeqQueue));printf(请输入数据个数(偶数个)\n);scanf(%d,&n);SetStack(S,n);printf(初始结果为:\n);Print(S,n);SetQueue(Q,S,n);//printf(\n);//PrintQ(Q,n);Fun(Q,S,n);printf(转换后结果为:\n);Print(S,n);}
本文标题:通过一个循环队列重新排列栈中元素
链接地址:https://www.777doc.com/doc-6487970 .html