第3章 栈和队列
- 格式:doc
- 大小:414.00 KB
- 文档页数:22
栈和队列的基本操作是线性表操作的子集,是限定性(操作受限制)的数据结构。
第三章栈和队列数据结构之栈和队列23. 1 栈¾定义:是限定仅在表尾进行插入或删除操作的线性表。
(后进先出线性表LIFO)¾栈底指针(base) :是线性表的基址;¾栈顶指针(top):指向线性表最后一个元素的后面。
¾当top=base 时,为空栈。
¾基本操作:InitStack(&S), DestroyStack(&S),StackEmpty(S) , ClearStack(&S),GetTop(S ,&e), StackLength(S) ,Push(&S, e): 完成在表尾插入一个元素e.Pop(&S,&e): 完成在表尾删除一个元素。
数据结构之栈和队列3¾栈的表示和实现¾顺序栈:是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素;栈满之后,可再追加栈空间即为动态栈。
¾顺序栈的结构类型定义:typedef int SElemType;typedef struct{SElemType *base; /* 栈底指针*/SElemType *top; /* 栈顶指针*/int stacksize; /* 栈空间大小*/ }SqStack;数据结构之栈和队列4¾基本算法描述¾建立能存放50个栈元素的空栈#define STACK_INIT_SIZE 50#define STACKINCREMENT 10Status InitStack_Sq(Stack &S){S.base=(SET*)malloc(STACK_INIT_SIZE *sizeof(SET)); /*为栈分配空间*/if(S.base==NULL)exit(OVERFLOW); /*存储分配失败*/ S.top=S.base;S.stacksize = STACK_INIT_SIZE;return OK; }数据结构之栈和队列5¾出栈操作算法void pop(Sqstack s,SElemType e){if(s.top= = s.base)return ERROR;else{s.top--;e= *s.top;}return OK;}出栈操作topABY topABYbase base数据结构之栈和队列6¾压栈操作算法void Push(SqStack s,SElemType e)if(s.top-s.base>= S.stacksize;) {S.base=(SET*)realloc(S,base,(S.stacksize+STACKINCREMEN T) *sizeof(SET)); /*为栈重新分配空间*/if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top=e;S.top++;}return OK; }topAB压栈操作topABebase base数据结构之栈和队列7¾栈的销毁void DestroyStack_Sq(Stack &S){ if (S.base) free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;}¾栈的清除void ClearStack_Sq(Stack &S){ S.top = S.base ;}数据结构之栈和队列8¾判断栈是否为空栈Status StackEmpty_Sq(Stack S){ if(S.top==S.base) return TRUE;else return FALSE;}¾获得栈的实际长度int StackLength_Sq(Stack S){return(abs(S.top-S.base));}数据结构之栈和队列9¾多个栈共享邻接空间两个栈共享一空间::::::top1top21m中间可用空间栈1栈2地址Base1Base 2……数据结构之栈和队列103. 3 栈与递归¾递归函数:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数。
《数据结构》第3章栈和队列共85题一、单选1. (1)分题目ID号:10705 题目难度:容易设对一组数据的处理具有“后进先出”的特点,则应采用的数据结构是【1】A. 队列B. 栈C. 顺序表D. 二叉树题目答案:B2. (1)分题目ID号:10706 题目难度:容易若进栈序列为3、5、7、9,进栈和出栈可穿插进行,则不可能的出栈序列是【1】A. 7,5,3,9B. 9,5,7,3C. 9,7,5,3D. 7,5,9,3题目答案:B3. (1)分题目ID号:10707 题目难度:较难设用一维数组A[m]存储栈,令A[m-1]为栈底,t指示当前栈顶的位置。
如果栈不空,则出栈时应使【1】A. t=t+lB. t=t-1C. t=m-1D. 不改变t题目答案:A4. (1)分题目ID号:10708 题目难度:容易设用一维数组A[m]存储栈,令A[0]为栈底,top指示当前钱顶的位置,当把栈清空时所要执行的操作是【1】A. top--B. top=0C. top=-1D. top=m-1 题目答案:C5. (1)分题目ID号:10709 题目难度:容易设栈s的初始状态为空,如果进栈序列为1、2、3、4、5、6,出栈序列为3、2、5、6、4、1,则s的容量至少是【1】A. 6B. 4C. 2D. 3题目答案:D6. (1)分题目ID号:10710 题目难度:容易设栈s最多能容纳4个元素,现有A、B、C、D、E、F六个元素按顺序进栈,以下可能的出栈序列是【1】A. E、D、C、B、A、FB. B、C、E、F、A、DC. C、B、E、D、A、FD. A、D、F、E、B、C题目答案:C7. (1)分题目ID号:10711 题目难度:容易链式栈与顺序栈相比,一个比较明显的优点是【1】A. 插入操作更加方便B. 通常不会出现栈满的情况C. 不会出现栈空的情况D. 删除操作更加方便题目答案:B8. (1)分题目ID号:10712 题目难度:容易在完成出栈操作时,【1】A. 必须判断栈是否满B. 要判断栈元素的类型C. 必须判断栈是否空D. 不必做任何判断题目答案:C9. (1)分题目ID号:10713 题目难度:容易已知栈的入栈序列是1、2、3、……、n,出栈序列是e1、e2、……、en。
若e1=n,则ei为【1】A. iB. n-i+1C. n-iD. 不能确定题目答案:B10. (1)分题目ID号:10714 题目难度:容易在解决计算机主机与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,打印机则从该缓冲区取出数据打印,该缓冲区应该是一个【1】结构。
A. 栈B. 队列C. 线性表 D. 数组题目答案:B11. (1)分题目ID号:10715 题目难度:容易【1】不是队的基本运算。
A. 向队尾插入一个元素B. 读队头元素C. 删除队中第i个元素D. 判队是否为空题目答案:C12. (1)分题目ID号:10716 题目难度:容易当以顺序方式存储队列时,解决“假溢出”较为有效的方法是采用【1】A. 顺序队列B. 链式队列C. 顺序循环队列D. 三种都可以题目答案:C13. (1)分题目ID号:10717 题目难度:容易设一维数组Q[m]用于存放循环队列中的元素,同时用f指示当前队头元素的位置,r指示当前队尾元素的下一个位置。
假定队中元素个数总小于m,则计算队列中元素个数的公式为【1】A. (m+r-f)%m B. r-f C. m-(f-r) D. (m+(f-r))%m 题目答案:A题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。
在循环意义下的求元素个数的运算可以利用求模运算。
14. (1)分题目ID号:10718 题目难度:容易若用一个大小为10的一维数组存储顺序循环队列,且当前rear和front的值分别为4和8,当从队列中删除3个元素再加入2个元素后,rear和front的值分别是【1】A. 无法完成要求的操作B. 6和lC. 7和0 D. 6和11题目答案:B题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。
在循环意义下的加1运算通常用求模运算来实现。
所以入队和出队时的操作分别为:rear=(rear+1)%m,front=(front+1)%m。
15. (1)分题目ID号:10719 题目难度:容易栈和队列都是运算受限的线性表,它们的共同点是【1】A. 只允许在端点处插入和删除元素B. 元素都是后进先出C. 元素都是先进先出 D. 必须采用顺序存储结构题目答案:A题目分析:栈和队列都是运算受限的线性表,只允许在表端点处进行操作。
16. (1)分题目ID号:11091 题目难度:容易在一个链式队列中,假设front和rear分别为队头和队尾指针,则插入s所指结点的操作为【1】A. rear->next=s;rear=s;B. front ->next=s;front=s;C. s->next=front;front=s;D. s->next=r ear;rear=s;题目答案:A题目分析:队列是运算受限的线性表(FIFO),插入元素只能插在队尾,所以需修改队尾指针。
17. (1)分题目ID号:11096 题目难度:容易用链接方式存储的队列,在进行删除运算时【1】A. 仅修改头指针B. 头、尾指针可能都要修改C. 头、尾指针都要修改D. 仅修改尾指针题目答案:B题目分析:若队列中的元素多于一个,删除队列中的队尾元素,只需修改队尾指针;若队列中只有一个元素,删除该元素后,队头队尾指针都需要修改。
18. (1)分题目ID号:11097 题目难度:容易设计一个判别表达式中左,右括号是否配对出现的算法,采用【1】数据结构最佳。
A. 线性表的顺序存储结构B. 队列C. 线性表的链式存储结构D. 栈题目答案:D19. (1)分题目ID号:11099 题目难度:容易表达式a*(b+c)-d的后缀表达式是【1】A. abcd*+-B. abc+*d-C. abc*+d-D. -+*abcd题目答案:B20. (1)分题目ID号:11228 题目难度:容易已知队列(4,41,5,7,18.26,15),第一个进入队列的元素是4,则第五个出队列的元素是【1】A. 5B. 41C. 18D. 7题目答案:C21. (1)分题目ID号:11229 题目难度:容易对于顺序存储的循环队列,存储空间大小为N,头指针为F,尾指针为R,队列中元素的个数应为【1】A. R-FB. N+R-FC. (R—F十1)%N D. (N+R-F)%N题目答案:D22. (1)分题目ID号:11230 题目难度:容易一个队列的进队列顺序是1,2,3,4,则出队列顺序为【1】A. 4,3,2,1B. 2,4,3,1C. 1,2,3,4D. 3,2,1,4题目答案:C23. (1)分题目ID号:11231 题目难度:容易下列关于栈的叙述中正确的是【1】A. 在栈中只能插入数据B. 在栈中只能删除数据C. 栈是先进先出的线性表D. 栈是先进后出的线性表题目答案:D24. (1)分题目ID号:11232 题目难度:容易设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是【1】A. 6B. 4C. 3D. 2题目答案:C题目分析:根据栈的性质(LIFO)得,e2出栈前,栈中存有e1和e2两个元素,e4出栈前,栈中存有e1、e3和e4三个元素,e4和e3出栈以后,e5和e6入栈,栈中同样存在e1、e5和e6三个元素,然后三个元素依次出栈,所以栈的容量至少应该为3。
25. (1)分题目ID号:11651 题目难度:容易若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是【1】A. top=top+1; V[top]=xB. V[top ]=x; top=top+1C. top=top-1; V[top]=xD. V[top ]=x; top=top-1题目答案:C题目分析:栈式运算受限的线性表,只允许在栈顶进行插入和删除操作。
本题中栈顶指针为n+1,该数组将栈顶放在了下标大的一端,所以在进行入栈操作时top 指针应该进行减一操作。
通常元素进栈的操作为:先移动栈顶指针后存入元素。
26. (1)分题目ID号:11652 题目难度:容易一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i (1≤i≤n)个元素是【1】A. 不确定 B. n-i+1 C. iD. n-i题目答案:B题目分析:【解析】根据栈的性质(LIFO),若输出的第一个元素是n,则表明所有的元素已经入栈,则出栈顺序为n,n-1,…,3,2,1。
27. (1)分题目ID号:11653 题目难度:容易如果我们用数组A[1..100]来实现一个大小为100的栈,并且用变量top 来指示栈顶,top的初值为0,表示栈空。
请问在top为100时,再进行入栈操作,会产生【1】A. 正常动作B. 溢出C. 下溢 D. 同步题目答案:B题目分析:当top为100时,表示栈已经满了,此时再进行入栈操作,则会造成溢出。
28. (1)分题目ID号:11654 题目难度:容易栈在【1】中应用。
A. 递归调用B. 子程序调用 C. 表达式求值 D. A,B,C题目答案:D29. (1)分题目ID号:11655 题目难度:容易若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?【1】A. 1和 5B. 2和4 C. 4和2 D. 5和1题目答案:B题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。
在循环意义下的加1运算通常用求模运算来实现。
所以入队和出队时的操作分别为:rear=(rear+1)%m,front=(front+1)%m。
30. (1)分题目ID号:11656 题目难度:容易栈和队列的共同点是【1】A. 都是先进先出 B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点题目答案:C题目分析:栈和队列都是运算受限的线性表,只允许在表端点处进行操作。
31. (1)分题目ID号:11657 题目难度:容易判定一个栈S(元素个数最多为MAXSIZE)为空和满的条件分别为【1】A. S->top!=-1 S->top!=MAXSIZE-1B. S->top=-1 S->top=MAXSIZE-1C. S->top=-1 S->top!=MAXSIZE-1D. S->top!=-1 S->top=MAXSIZE-1题目答案:B二、多选1. (1)分题目ID号:11227 题目难度:容易已知元素(8,25,14,87,51,90,6,19,20)。