java数据结栈空的条件表达式_数据结构——栈和队列例题

1.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是_____。

选项ABCD均错误,第j个输出元素应为i-j+1。

栈是一种先进后出的数据结构,也就是说如果入栈顺序为123,那么出栈顺序则为321。

题目中栈的输入序列为1,2,3,...,n,该序列是等差为1的递增序列,那么出栈顺序应该为n,n-1...,3,2,1,也就是等差为1的递减序列。那么当输出序列的第一个元素为i时,利用等差数列公式an=a1+(n-1)*d可知,第j个元素应为aj=i+(j-1)*(-1)=i-j+1。

2.一个栈的输入序列为1,2,3,4,5,则下列序列不可能是栈的输出序列的是?

A.23415 B.54132 C.23145 D.15432

不可能序列是B,因为5最后进栈,此时栈中从栈顶到栈底的5,4,3,2,1,因此不可能出栈为54132

那其他三项为什么可能啊?

A 1进 2进 2出 3进 3出 4进 4出 1出 5进 5出 C 1进 2进 2出 3进 3出 1出 4进 4出 5进 5出 D 1进 1出 2进 3进 4进 5进 5出 4出 3出 2出

3.所谓“循环队列”是指用单向循环链表或者循环数组表示的队列 f

错误,循环队列指的是后者,用数组表示的队列,利用求余数运算使得头尾相接

4.在用数组表示的循环队列中,front值一定小于等于rear值F

rear后裔

5.从一个栈顶指针为HS的链栈中删除一个结点时,用X保存被删结点的值,则执行?

HS是一个指针,但是在D中却把一个数赋值给了HS,HS = HS->data;那HS就不再指向该链表了,指向了内存地址为data的地方.程序跑飞了

应该是这样的啊

x=HS->data;

HS=HS->next;

6.若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:

顺序栈是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶的位置。

通常,当栈存在一个元素时,top等于0,因此通常把空栈的判定条件定为top等于-1。注意:若栈顶top初始化为0,则指向栈顶元素的下一个位置,对此相应的定义操作也会变化。此处top初始化为-1。)

7.若采用带头、尾指针的单向链表表示一个堆栈,那么该堆栈的栈顶指针top应该如何设置()

a 表尾为top 删除的时候复杂度太大

8.a+b*c+(d*e+f)*g ----> abc*+de*f+g*+

遇到a:直接输出:

后缀表达式:a

堆栈:空

遇到+:堆栈:空,所以+入栈

后缀表达式:a

堆栈:+

遇到b: 直接输出

后缀表达式:ab

堆栈:+

遇到*:堆栈非空,但是+的优先级不高于*,所以*入栈

后缀表达式: ab

堆栈:*+

遇到c:直接输出

后缀表达式:abc

堆栈:*+

遇到+:堆栈非空,堆栈中的*优先级大于+,输出并出栈,堆栈中的+优先级等于+,输出并出栈,然后再将该运算符(+)入栈

后缀表达式:abc*+

堆栈:+

遇到(:直接入栈

后缀表达式:abc*+

堆栈:(+

遇到d:输出

后缀表达式:abc*+d

堆栈:(+

遇到*:堆栈非空,堆栈中的(优先级小于*,所以不出栈

后缀表达式:abc*+d

堆栈:*(+

遇到e:输出

后缀表达式:abc*+de

堆栈:*(+

遇到+:由于*的优先级大于+,输出并出栈,但是(的优先级低于+,所以将*出栈,+入栈

后缀表达式:abc*+de*

堆栈:+(+

遇到f:输出

后缀表达式:abc*+de*f

堆栈:+(+

遇到):执行出栈并输出元素,直到弹出左括号,所括号不输出

后缀表达式:abc*+de*f+

堆栈:+

遇到*:堆栈为空,入栈

后缀表达式: abc*+de*f+

堆栈:*+

遇到g:输出

后缀表达式:abc*+de*f+g

堆栈:*+

遇到中缀表达式结束:弹出所有的运算符并输出

后缀表达式:abc*+de*f+g*+

堆栈:空

9.若借助堆栈将中缀表达式a+b*c+(d*e+f)*g转换为后缀表达式,当读入f时,堆栈里的内容是什么(按堆栈自底向上顺序)

B.+(+

10.如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:

关键这是一个循环队列,r可能小于f,例如n为4时,元素个数有0、1、2、3,r可以为0,f为2,这样实际上有两个元素,但是以r-f得出来的是-2。

D答案在r大于f和r小于f时都适用。

11.如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:

(front+size-1)%m

12.若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front和rear的值分别为多少?

A.2和0

13.利用大小为n的数组(下标从0到n-1)存储一个栈时,假定栈从数组另一头开始且top==n表示栈空,则向这个栈插入一个元素时,修改top指针应当执行

!!!!!!!

top--

14.某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a、b、c、d、e依次入此队列后再进行出队操作,则不可能得到的出队序列是:

B.d b c a e

————————————————

版权声明:本文为CSDN博主「HECHENNIU」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/HECHENNIU/article/details/105251937

你可能感兴趣的:(java数据结栈空的条件表达式)