1、习题课,第3章 栈和队列,3.1,(1) 123 , 132 , 213 , 231 , 321 (2) 435612不能得到(6出站时,12必须在站中,只能出站成21,无法得到12)135426可以 1S1X2S3S3X4S5S5X4X2X6S6X,(1)如果进站的车厢序列为123,则可能得到的出站车厢序列是什么? (2)如果进站的车厢序列为123456,则能否得到435612和135426出站序列,并请说明为什么不能得到或如何得到。,3.4简述以下算法的功能,分析: while循环 将栈中数据依次出栈到A数组 for循环 将数组A中元素依次入栈 结果:将堆栈中的元素逆序,(1)status
2、 algol(Stack S)int I,n,A255;n = 0;while (!Stackempty(S) n+;Pop(S,An);for (i=1 ; i=n ; i+) Push(S,Ai);,3.4简述以下算法的功能,分析: 第一个while循环:将S栈中不等于e的元素放入T栈。最后S为空栈第二个while循环:将T栈中元素出栈到S栈结果:将堆栈S中不等于e的元素逆序,(2) status algo2(Stack S , int e)Stack T ; int d ;InitStack(T);while (! StackEmpty(S)Pop(S,d);if (d!=e) Push
3、(T,d);while(!Stackempty(T)Pop(T,d);Push(S,d);,3.12写出以下程序段的输出结果,分析: 队列 x y 1. h e c 2. hr e c 3. hrc e c 4. rc h c 5. rch h c 6. ch r c 7. cha r c 结果:char,Void main()Queue Q ; InitQueue(Q);char x=e , y =c ;EnQueue(Q,h); /1EnQueue(Q,r); /2EnQueue(Q,y); /3DeQueue(Q,x); /4Enqueue(Q,x); /5DeQueue(Q,x); /
4、6EnQueue(Q,a); /7 while (!QueueEmpty(Q)DeQueue(Q,y);printf(y);printf(x); ,3.14 以1234作为双端队列的输入序列,分别求出满足以下条件的输出序列,解: 可能的组合(24种)1234,1243,1324,1342,1423,1432, 2134,2143,2314,2341,2413,2431,3124,3142,3214,3241,3412,3421, 4123,4132,4213,4231,4312,4321输入受限不能得到:4213 4231输出受限不能得到:4132 4231 都不能得到:4231 (1)421
5、3 (2)4132 (3)4231,(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列 (2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列 (3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列,3.16 n节硬席或软席车厢调度成软席在硬席之前,HSSHS = SSSHH 思路:判断每节车厢,如果是H的只入栈,如果是S则入栈后出栈 InitStack(T); while (入口有车厢e)if (e=H) push(T,e);else push(T,e);pop(T,e); While (!EmptyStack(T) pop
6、(T,e);,3.28 带头指针的循环链表表示队列,并且只设一个指针指向队尾结点,编写队列初始化、入队列和出队列算法,typedef struct QNodeQElemType data;Struct Qnode *next; QNode,*QueuePtr; typedef struct QueuePtr rear; LinkQueue;Status InitQueue(LinkQueue ,3.28 带头指针的循环链表表示队列,并且只设一个指针指向队尾结点,编写队列初始化、入队列和出队列算法,Status EnQueue(LinkQueue return OK: /EnQueue,3.28
7、 带头指针的循环链表表示队列,并且只设一个指针指向队尾结点,编写队列初始化、入队列和出队列算法,Status DeQueue(LinkQueue ,2009 (一、2),设栈S和队列Q的初始状态均为空,元素abcdefg依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是bdcfeag,则栈S的容量至少是 A1 B.2 C.3 D.4,2010 一,1、若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行。但不允许连续三次进行退栈工作,则不可能得到的出栈序列是( ) A:dcebfa B:cbdaef C:dbcaef D:afedcb 2、某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作,则不可能得到的顺序是( ) A:bacde B:dbace C:dbcae D:ecbad,2011,课堂练习,