• 数据结构04


    栈的顺序存储
    采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top )指示当前栈顶元素的位置。
    若存储栈的长度为 StackSize ,则栈顶位置 top 必须小于 StackSize 。当栈存在一个元素时, top 等于 0 ,因此通常把空栈的判断条件定为top 等于 -1
    栈的链式存储
    采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢 的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。这里规定链栈没有头节 点, Lhead 指向栈顶元素
    循环队列
    队列溢出后就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。
    当队首指针 Q->front = MAXSIZE-1 后,再前进一个位置就自动到 0 ,这可以利用除法取余运算 来实现。
    初始时: Q->front = Q->rear=0
    队首指针加 1 Q->front = (Q->front + 1) % MAXSIZE
    队尾指针加 1 Q->rear = (Q->rear + 1) % MAXSIZE
    队列长度: (Q->rear - Q->front + MAXSIZE) % MAXSIZE
    (21 条消息 ) 数据结构:栈和队列 (Stack & Queue) 【详解】 UniqueUnit 的博客 -CSDN 博客栈和队列
    那么,循环队列队空和队满的判断条件是什么呢?
    显然,队空的条件是 Q->front == Q->rear 。若入队元素的速度快于出队元素的速度,则队尾指针很快 就会赶上队首指针,此时可以看出队满时也有 Q ->front == Q -> rear
    为了区分队空还是队满的情况我们可以用一个方式:
    1 )牺牲一个单元来区分队空和队满,入队时少用一个队列单元,这是种较为普遍的做法,约定以 队头指针在队尾指针的下一位置作为队满的标志”
    队满条件: (Q->rear + 1)%Maxsize == Q->front
    队空条件仍: Q->front == Q->rear
    队列中元素的个数: (Q->rear - Q ->front + Maxsize)% Maxsize
    链队列
    队列的链式存储结构表示为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表,只不过它 只能尾进头出而已。
    空队列时, front rear 都指向头结点。
    Q - >front == NULL 并且 Q - >rear == NULL 时,链队列为空。
  • 相关阅读:
    软件设计师教程(一)计算机系统知识-计算机系统基础知识
    操作系统篇之虚拟内存
    使用.NET Jieba.NET 的 PosSegmenter 实现中文分词匹配
    Java学生管理系统升级版
    set 和 map的区别
    C++设计模式---单例模式
    Java老人护理上门服务类型系统小程序APP源码
    python爬取电影
    UUCTF WP
    分块指北
  • 原文地址:https://blog.csdn.net/Sj740383500/article/details/127811427