3、栈和队列

本文介绍了栈和队列这两种数据结构的基本概念,包括它们的特性——栈的后进先出(LIFO)和队列的先进先出(FIFO)。详细阐述了栈和队列的顺序存储和链式存储结构,以及相应的操作,如栈的push、pop、peek,队列的enqueue、dequeue。此外,文章提到了栈和队列在实际问题中的应用,如括号匹配、表达式求解和递归实现,并指出Python中可以使用collections.deque来实现队列。
摘要由CSDN通过智能技术生成

转载地址:数据结构的一些基本概念

Python和C语言实现:GitHub 代码地址

1、栈和队列的一些基本知识点

1.1、栈

栈(Stack),有些地方称为堆栈,是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)先进后出(LIFO, Last In First Out)。top= -1时为空栈,top=0只能说明栈中只有一个元素,并且元素进栈时top应该自增。



  1. 顺序存储栈:顺序存储结构。
  2. 链栈:链式存储结构。插入和删除操作仅限制在链头位置上进行。栈顶指针就是链表的头指针。通常不会出现栈满的情况。 不需要判断栈满但需要判断栈空。
  3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。栈1的底在v[1],栈2的底在V[m],则栈满的条件是top[1]+1=top[2]。
  4. 基本操作:删除栈顶元素、判断栈是否为空以及将栈置为空栈等。
  5. 对于n个元素的入栈问题,可能的出栈顺序有C(2n,n)/(n+1)个。
  6. 堆栈溢出一般是循环的递归调用、大数据结构的局部变量导致的

应用

  1. 进制转换
  2. 括号匹配的检验
  3. 行编辑程序
  4. 迷宫求解:若当前位置“可通”,则纳入路径,继续前进;若当前位置“不可通”,则后退,换方向继续探索;若四周“均无通路”,则将当前位置从路径中删除出去。
  5. 表达式求解:前缀、中缀、后缀。
    a、操作数之间的相对次序不变;
    b、运算符的相对次序不同;
    c、中缀式丢失了括弧信息,致使运算的次序不确定
    d、前缀式的运算规则为:连续出现的两个操作数和在它们之前且紧靠它们的运算符构成一个最小表达式
    e、后缀式的运算规则为:运算符在式中出现的顺序恰为表达式的运算顺序;每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式。
  6. 实现递归:多个函数嵌套调用的规则是:后调用先返回。
  7. 浏览器历史纪录,Android中的最近任务,Activity的启动模式,CPU中栈的实现,Word自动保存,解析计算式,解析xml/json。解析XML时,需要校验节点是否闭合,节点闭合的话,有头尾符号相对应,遇到头符号将其放入栈中,遇到尾符号时,弹出栈的内容,看是否有与之对应的头符号,栈的特性刚好符合符号匹配的就近原则。

不是所有的递归程序都需要栈来保护现场,比方说求阶乘的,是单向递归,直接用循环去替代从1乘到n就是结果了,另外一些需要栈保存的也可以用队列等来替代。不是所有的递归转化为非递归都要用到栈。转化为非递归主要有两种方法:对于尾递归或单向递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值