zoukankan      html  css  js  c++  java
  • 数据结构(二)(三)栈和队列

    堆栈

    img

    1 定义

    1.1 具有一定操作约束线性表,只能在一端(栈顶,Top)做插入删除

    插入数据:入栈Push

    删除数据:出栈Pop

    后入先出:LIFO

    先入后出:FILO

    1.2 Stack

    1.2.1 一个或者多个有穷线性表

    1.2.2 操作集:长度MaxSize,堆栈元素ElementType

    Stack CreateStack(int MaxSize);

    int IsFull(Stack S,int MaxSize); 判断栈是否满

    void Push(Stack S,ElementType item); 压栈

    int IsEmpty(Stack S); 判断堆栈S是否为空

    ElementType Pop(Stack S); 删除并返回栈顶元素

    1.3 FILO,LIFO

    1.3.1 可用于表达式求职,迷宫求解等深广度优先搜索

    1.3.2 表达式求值后缀例:62/3-42*+=?

    1.3.3 相当6/2-3+4*2=8

    将计算运算符压入符号栈中遇到优先级比栈顶元素低的则弹出

    括号需要注意左右括号的匹配,同级运算符按照从左往右的优先级

    2 实现

    2.1 顺序存储

    2.1.1 初始化

    Top=-1表示栈空

    img

    2.1.2 入栈

    img

    2.1.3 出栈

    img

    img

    2.1.4 一个数组实现两个堆栈

    建栈

    Top1和Top2相遇栈满

    img

    入栈

    压栈判断栈满,通过Tag标识区分对哪个栈的操作

    img

    出栈

    出栈判断栈空

    img

    2.2 链式存储

    2.2.1 建栈

    单链表链栈,栈顶应该在表头

    img

    2.2.2 入栈

    入栈可以不用判断栈满,链表大小动态分配

    img

    2.2.3 出栈

    img

    队列

    img

    1 定义

    1.1 具有一定操作约束的线性表FIFO(先进先出表)

    1.2 只能在一段进行插入在另一端进行删除

    1.3 数据对象集:一个有0个或者多个元素的又穷线性表

    1.4 操作集:长度为MaxSize的队列Q,和队列元素ElementType

    Queue Create(int MaxSize); //生成长度为MaxSize的空队列

    int IsFullQueue(Queue Q,int MaxSize); //判断队列Q是否已满

    void AddQueue(Queue Q,ElementType item); //将数据元素item插入队列Q中

    int IsEmptyQueue(Queue Q); //判断队列是否为空

    ElementType OutDeleteQueue(Queue Q); //将对头数据元素从队列中删除并返回

    2 队列顺序存储

    2.1 创建

    front记录对头元素前一个位置rear记录队尾,浪费一个位置判断队列满情况

    img

    2.2 初始化空间

    img

    2.3 判断队满

    队尾位置加一模队最大存储空间==队头元素

    img

    2.4 将数据元素插入队列

    img

    如图

    img

    2.5 判断队空

    img

    2.6 出队删除

    img

    3 队列的链式存储

    3.1 创建

    img

    3.2 判断队空

    img

    3.3 入队

    img

    忘记计数队列中元素的个数了,立个flag每次添加时候++,删除时候--

    3.4 出队

    img

  • 相关阅读:
    C# WinForm 中 MessageBox的使用详解
    C#中MemoryStream类的介绍
    C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
    C#ImageList和ListView的使用
    ListView的BeginUpdate()和EndUpdate()的用处
    C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法
    C#字符串比较方法
    C# ListView用法详解
    c#中枚举类型的定义与使用
    c#中的模态对话框和非模态对话框
  • 原文地址:https://www.cnblogs.com/binjz/p/12501332.html
Copyright © 2011-2022 走看看