【数据结构---23】栈和队列知识点总结

博客围绕栈和队列展开,介绍了栈是特殊线性表,特性为先入后出,用C语言实现动态栈,还有相关OJ练习题;阐述栈与栈区区别,以及递归转循环用栈的原因。同时介绍队列是特殊线性表,特性为先入先出,用C语言实现链表队列,也有队列OJ练习题。
  1. 什么是栈,栈有什么特性?

    栈是一种特殊的线性表,只允许在一端进行插入和删除操作

    栈的特性是先入后出

  2. 用C语言实现一个动态栈

    传送门:C语言实现一个动态栈

  3. 栈的在线OJ练习题

    传送门:基于栈的括号匹配检测

    传送门:最小栈的实现

    传送门:用栈模拟实现队列

  4. 栈和程序运行时的栈区有什么区别?

    栈是一种特殊的线性表,而栈区是真实存在的内存空间

  5. 为什么将递归程序转化成循环时需要用到栈?

    因为递归时对于函数的重复调用,函数的返回和栈非常类似

  6. 什么是队列,队列有什么特性?栈和队列有什么区别?

    队列是只可以在一端进行插入操作在另一端进行删除操作的特殊线性表

    队列的特性是先入先出

    栈是先放入的元素后出去,队列是先放入的元素先出去

  7. 用C语言实现一个队列

    传送门:C语言实现一个链表队列

  8. 队列的在线OJ练习题

    传送门:用队列模拟实现栈

    传送门:设计循环队列

### 数据结构中的队列 #### 的概念与特性 是一种遵循后进先出(LIFO, Last In First Out)原则的线性数据结构。这意味着最后被压入的元素会最先弹出[^1]。通常支持两个基本操作:`push` `pop`,分别用于向顶添加元素以及移除顶元素。 以下是的一个简单实现示例: ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() def is_empty(self): return len(self.items) == 0 def peek(self): if not self.is_empty(): return self.items[-1] def size(self): return len(self.items) ``` #### 队列的概念与特性 队列则是一种先进先出(FIFO, First In First Out)的数据结构。最早进入队列的元素会被优先处理。队列的主要操作包括 `enqueue` `dequeue`,前者用来在队尾插入新元素,后者用来从队首移除元素。 下面是一个基于列表实现的队列例子: ```python class Queue: def __init__(self): self.items = [] def enqueue(self, item): self.items.append(item) def dequeue(self): if not self.is_empty(): return self.items.pop(0) def is_empty(self): return len(self.items) == 0 def front(self): if not self.is_empty(): return self.items[0] def size(self): return len(self.items) ``` #### 双端队列的特点 双端队列(Deque)结合了队列的功能,允许在一端或两端执行插入删除操作[^2]。这种灵活性使得双端队列成为一种非常强大的工具,在许多算法场景下都能发挥重要作用。 #### 存储方式 无论是还是队列,它们都可以通过顺序存储或者链式存储的方式来实现。对于顺序存储而言,通常是利用数组作为底层容器;而链式存储则是借助指针连接各个节点形成链条状结构[^3]。 需要注意的是,尽管队列属于线性表范畴,但由于其特定的操作约束条件限制了随机访问能力——也就是说无法像普通线性表那样随意获取其中间位置上的任意元素。 #### 应用领域 - **的应用**: 表达式求值、括号匹配检测、函数调用管理等。 - **队列的应用**: 打印任务调度、广度优先搜索(BFS)、银行排队系统模拟等问题解决过程中经常需要用到队列机制。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值