数据结构(4)栈和队列

一、栈

栈是一种线性的数据存储结构,由于栈只允许从一端进行数据的插入和删除。因此,栈是**先进后出(FILO)**的特性。

系统栈是由系统进行创建和维护的,数据结构中的栈是由自己创建和维护的。

栈的类型有:满增栈,满减栈,空增栈,空减栈

满栈和空栈的判断依据:栈顶位置是否有数据,栈顶有数据的称为满栈,栈顶位置没有数据的称为空栈。

增栈和减栈:增栈是指数据的存放位置有低地址向高地址增长,减栈是指,数据的存放位置有高地址向低地址增长。

2.栈的实现

根据栈的实现方式,可以将栈分为顺序栈和链式栈,即使用数组或链表来实现栈

  • 数组实现:使用固定大小的数组,栈的大小在创建时确定。
  • 链表实现:使用链表动态分配内存,栈的大小可以根据需要增长。
3. 栈的操作
  • 入栈(Push):将一个元素添加到栈的顶部。
  • 出栈(Pop):移除并返回栈顶部的元素。
  • 查看栈顶元素(Peek):返回栈顶部的元素,但不移除它。
  • 判断栈是否为空(IsEmpty):检查栈中是否还有元素。
  • 销毁栈(destroy):销毁栈结构,释放申请的堆区空间。

二、队列

队列也是一种顺序存储数据的结构,它只允许从一端进行数据的插入,另一端进行数据的删除,因此,它遵循**先进先出(FIFO)**的原则

2. 队列的操作
  • 入队(Enqueue):将一个元素添加到队列的尾部。
  • 出队(Dequeue):移除并返回队列头部的元素。
  • 查看队头元素(Peek):返回队列头部的元素,但不移除它。
  • 判断队列是否为空(IsEmpty):检查队列中是否还有元素。
  • 销毁队列(destroy):销毁队列,释放申请的堆区内存。
3. 队列的实现

队列可以通过数组或链表来实现:

  • 数组实现:使用固定大小的数组,队列的大小在创建时确定。

使用数组实现队列时 会出现假溢出的错误:如果不正确地管理队列的头尾指针,可能会导致队列在逻辑上被认为是满的,即使实际上还有空间可用。

  • 链表实现:使用链表动态分配内存,队列的大小可以根据需要增长。

三、线程邮箱

线程邮箱(Thread Mailbox)是一种用于线程间通信的机制,允许一个线程将消息或数据发送到另一个线程。

线程邮箱的工作原理
  • 发送消息:一个线程可以将消息放入邮箱中,通常是通过调用一个发送函数。
  • 接收消息:另一个线程可以从邮箱中读取消息,通常是通过调用一个接收函数。
  • 同步机制:为了确保线程安全,邮箱的实现通常会使用锁或其他同步机制来防止数据竞争。
相关推荐
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小蒋学算法4 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
思麟呀6 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
All for pursuit.8 小时前
【分治-3】347.前K个高频元素
数据结构·c++·算法·leetcode
All for pursuit.9 小时前
【二分查找-2】34.在排序数组中查找元素的第一个和最后一个位置
数据结构·c++·算法·leetcode
bro_Java66610 小时前
链表进阶2:双向链表的构建
java·数据结构·链表
梦帮科技11 小时前
量子张量网络破局大模型:从矩阵乘积态 (MPS) 到张量列 (TT-SVD) 低秩收缩全推导
网络·数据结构·数据库·线性代数·矩阵·架构·模拟退火算法
LOVE️YOU12 小时前
Python 数据结构的本质:位置、对象引用、Hash 与可变性
数据结构·python·哈希算法
不会就选b12 小时前
算法日常・每日刷题--<动态规划>1
java·数据结构·算法
shehuiyuelaiyuehao12 小时前
算法54,链表 两数相加
数据结构·算法·链表