栈和队列作业

  • 格式:doc
  • 大小:32.50 KB
  • 文档页数:3

第三章 栈和队列

一、填空题

1. 线性表、栈和队列从逻辑上来说都是____________结构。可以在线性表的_______位置插入和删除元素;对于栈只能在__________插入和删除元素;对于队列只能在___________插入元素和在_________删除元素。

2. 栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为__________表;队列的插入和删除运算分别在队列的两端进行,进行插入的一端叫做__________,进行删除的一端叫做___________,先进队的元素必定先出队,所以又把队列称为____________表。

3. 假设用向量S[1:m]来存储顺序栈,指针top指向当前栈顶的位置。则当栈为空时满足的条件是____________;当栈为满时满足的条件是_____________。

4. 设有一个空栈,现有输入序列1、2、3、4、5,经过push、push、pop、push、pop、push、push、pop、pop、 pop后,输出序列为__________________。

5. 在一个顺序循环队列中为了方便入队列和出队列的操作通常约定头指针front指向实际队头元素的____________,尾指针rear指向当前实际队尾元素的____________。若该顺序循环队列有m个存储单元,则队列满时共有__________个元素。

6. 设有一个顺序循环队列如上题中的约定,则该队列满的条件是_________,队列空的条件是_________。

7. 不论是顺序栈(队列)还是链式栈(队列),插入(删除)运算的时间复杂度均为________。

8. 系统在函数调用前自动把调用后的____________压入堆栈;当函数调用结束后,系统又自动作退栈处理,并将程序执行流程无条件转移到所保存的_____________处继续执行。

二、选择题

1.设栈的输入序列是1、2、3、…、n,输出序列的第一个元素是n,则第i个输出元素是( )。

① n-i ② n-i-1 ③ n-i+1 ④不确定

2.设元素进栈次序为A、B、C、D、E,则下列不可能的出栈序列是( )。

① ABCDE ② BCDEA ③ EABCD ④ EDCBA

3.设用一维数组s[m]表示栈的存储空间,用top指向当前栈顶元素(其初始值为-1),则进行出栈时的操作序列是( )。

① x=s[op]; ② x=s[top];top=0;

③ x=s[top];top=top-1; ④ x=s[top];top==top+1;

4.设指针hs指向栈顶,指针s指向插入的结点A,则插入结点A时的操作为( )。

① hs->next=s; ② s->next=hs; hs=s;

③ s->next=hs->next; hs->next=s; ④ s->next=hs; hs=hs->next;

5.设用一维数组s[m]表示栈的存储空间,用top指向当前栈顶元素(其初始值为-1),则进行入栈时的操作序列是( )。

① s[top] =x; ② top=top+1;s[top]=x;

③ top==top-1;s[top]=x; ④ s[top]=x;top==top+1;

6.设front是链式队列的头指针,rear是链式队列的尾指针,s指向插入的结点A,则插入结点A的操作为( )。

① front->next=s; front=s; ② s->next=rear; rear=s; ③ rear->next=s; rear=s; ④ s->next=front; front=s;

7.设front是链式队列的头指针,rear是链式队列的尾指针,则删除队头元素的操作为( )。

① front=front->next; ② rear=rear->next ;

③ rear=front->next ; ④ front=rear->next;

8.对于一个具有m个存储单元的顺序循环队列,设front为队头指针,rear为队尾指针,则该队列中队列元素的个数计算公式为( )。

① rear-front ② front-rear

③ (rear-front)%m ④ (rear-front+m)%m

9. 设用一维数组q[m]作为顺序循环队列的存储空间,front指向队头元素的前一个位置,rear指向队尾元素的当前位置,则入队列的操作序列为( )。

① q[rear] =x;rear=rear+1; ② q[rear]=x;rear=rear-1;

③ rear=(rear+1)%m;q[rear] =x; ④ rear=(rear-1)%m;q[rear]=x;

10.设用一维数组q[m]作为顺序循环队列的存储空间,front指向队头元素的前一个位置,rear指向队尾元素的当前位置,则出队列的操作序列为( )。

① x=q[front];front=front+1; ② x=q[front];front=(front+1)%m;

③ x=q[front];front=front-1; ④ x=q[front]; front=(front-1)%m;

三、算法设计题 (选做)

1. 设有两个顺序栈S1和S2共享一个存储区S[0:m-1],为了尽量利用存储空间减少溢出的可能性,采用栈顶相向、迎面增长的存储方式,要求分别设计两个栈的入栈和出栈操作。

2. 设计算法判断表达式中的圆括号是否配对出现。

3. 设用一个单向循环链表来表示队列(也称循环队列),该队列只设一个队尾指针rear,不设队头指针front,要求设计出该队列的入队列和出队列操作。

4. 假设以一个一维向量q[0:m-1]作为顺序循环队列的存储空间,同时设变量rear和len分别指示顺序循环队列中的队尾元素的位置和实际队列中的元素个数,要求设计出该队列的入队列和出队列操作。

5. 将数字1、2、……、n按顺时针方向排列成环形,按顺时针方向从1开始计数,计满时则输出该位置上的数字并从环中删除该数字,然后从下一个数字开始继续计数,直到环中所有数字均被输出为止,要求设计一个算法完成此功能。