【数据结构】栈

概念和截图来自王道视频和PPT以及书本

定义:只允许在一端进行插入或删除的线性表
栈顶:允许插入和删除的一端
栈底:不允许
先进后出

链栈

头插法建立链表对应进栈操作
将链头看作是栈顶
定义:

typedef struct Linknode{
ElemType data;
struct Linknode *next;
}*LiStack

链栈与链表一样,同样分为带头结点和不带头结点的两种。
王道课本上面建立用不带头节点的。

选择题错题记录

设链表不带头结点且所有操作均在表头进行,则下列最不适合作为链栈的是()
A:只有表头结点指针,没有表尾指针的双向循环链表
B:只有表尾结点指针,没有表头指针的双向循环链表
C:只有表头结点指针,没有表尾指针的单向循环链表
D:只有表尾结点指针,没有表头指针的单向循环链表

【分析】
A、B这两个都是双向循环链表,对于双向循环链表来说,知道了头指针或者是尾指针中的其一,都很容易找到另外的尾指针或者是头指针
D是有表尾指针没有表头指针的单向循环链表,则找到表头指针的代码为

head = tail->next

很容易找到表头指针。
C是有表头指针没有表尾指针的单向循环链表,只有表头指针需要找表尾指针时,需要遍历一遍,时间复杂度O(n)
选C
2.

链栈(不带头结点)执行POP操作,并将出栈的元素存在x中,则执行代码为:

在这里插入图片描述3.

若一个栈的输入序列是P1,P2,~~~~Pn,输出序列是1,2,3,~ ~ ~n,若P3=1,则P1的值是

在这里插入图片描述4.

已知一个栈的入栈顺序是1,2,3,4,其出栈序列是P1,P2,P3,P4,则P2,P4不可能是

在这里插入图片描述5.

设栈的初始状态为空,当字符序列"n1_"作为栈的输入时,输出长度为3,且可用做C语言的标识符的序列有几个

【分析】C语言标识符的规则:
1.标识符必须以大小写英文字母或者下划线作为首字母。

2.标识符中只能包含大小写英文字母、数字、下划线,不允许出现如“ ! 、@、#、¥、%、^、&、*、(、)、/、?等其他标点,而且C语言中的标识符不能使用任何中文字符,包括汉字、中文标点。

3.标识符不能与c语言的保留字或者库函数名相同。

除以上三条外,在命名标识符时,还需要注意C语言对大小写敏感,因此,相同的字母的不同大小写是不同的标识符。

在这里插入图片描述6.(2013统考真题)

一个栈的入栈序列是1,2,3…n,出栈序列是P1,P2,P3…Pn。若P2=3,则P3可能的取值的个数为

【分析】
首先分为两种情况:

  • P3是3之后入栈的数:4、5…n
    则有n-3中可能
  • P3是3之前入栈的数:1或2
    当P3=1时:1入、2入、2出、3出、1出
    当P3=2时:1入、1出、2入、3入、3出2出
    综上:共n-3+2=n-1种取值
    7.(2018统考真题)

这里是引用

我原本选的是A,按照 a op b来算了,没看清题目中说的是b op a
step1:3+2=5
step2:8-5=3
step3:5*3=15
最终答案15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值