编程:已知Q是一个非空队列,S是一个空栈。编写算法,仅用队列和栈的ADT函数和少量工作变量,将队列Q的所有元素逆置。栈的ADT函数有:void makeEmpty(SqStack s); 置空栈void push(SqStack s,ElemType e); 元素e入栈ElemType pop(SqStack s); 出栈,返回栈顶元素int isEmpty(SqStack s); 判断栈空队列的ADT函数有:void enQueue(Queue q,ElemType e); 元素e入队ElemType deQueue(Queue q); 出队,返回队头元素int isEmpty(Queue q); 判断队空
举一反三
- 已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,使用 PASCAl或C语言编写一个算法,将队列Q中的所有元素逆置。的ADT函数有:makeEmpty ( s: stack ) ;//置空栈push ( s :stack ; value:datatype ) ;//新元素value入栈pop ( s : stack ) :datatype;//出栈,返回栈顶值isEmpty ( s :stack ) : Boolean ;//判栈空否队列的ADT函数有:enQueue( q:queue:value:datatype);//元素value进队deoueue (q:queue ) : datatype ;//出队列,返回队头值isEmpty(q:queue ) : boolean ;//判队列空否
- 已知栈的基本操作函数: int InitStack(SqStack *S); //构造空栈 int StackEmpty(SqStack *S);//判断栈空 int Push(SqStack *S,ElemType e);//入栈 int Pop(SqStack *S,ElemType *e);//出栈 函数conversion实现十进制数转换为八进制数,请将函数补充完整。 void conversion____{ InitStack(S); scanf("%d",&N); while(N){ ____________(1)_____________; N=N/8; } while(____________(2)_________){ Pop(S,&e); printf("%d",e); } }//conversion
- 设栈s和队列q均为空,先将a,b,c,d依次进队列q,再将队列q中顺次出队的元素进栈s,直至队空。再将栈s中的元素逐个出栈,并将出栈元素顺次进队列q,则队列q的状态是
- 设栈S和队列Q的初始状态为空,元素e1.e2.e3.e4.e5.e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2.e4.e3.e6.e5.e1,则栈S的容量至少应该是。
- 设栈S元素和队列Q的初始状态均为空,元素abcdef依次通过栈S,若每个元素出栈后立即进入队列Q,且6个元素的出队顺序是bdcfea,则栈S的容量至少是(