zoukankan      html  css  js  c++  java
  • 栈和队列


    阅读目录

    一、栈

    二、队列

    一、栈

    1.栈的定义

    栈是限定仅在表尾进行插入或删除操作的线性表。因此对栈来说,表尾端有其特殊含义,称栈顶,相应的表头端称为栈底。栈又称为后进先出(LIFO)线性表。

    2.基本操作

    InitStack(&S)                 //构造一个空栈S
    DestroyStack(&S)              //栈S被销毁
    ClearStack(&S)                //将S清为空栈
    StackLength(S)                //返回S的元素个数,即栈的长度
    GetTop(S,&e)                  //用e返回S的栈顶元素
    Push(&S,e)                    //插入元素e为新的栈顶元素
    Pop(&S,&e)                    //删除S的栈顶元素,并用e返回其值
    StackTraverse(S,visit())      //从栈底到栈顶依次对S的每个数据元素调用visit()。一旦visit()失败,则操作失败。
    

    3.栈的表示和实现

    3.1顺序栈

    3.1.1定义

    顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

    3.1.2实现
    #define MaxSize 50
    typedef struct{
        ElemType   data[MaxSize]
        int top;
    }SqStack;
    
    3.1.3基础操作
    //初始化空栈
    void InitStack(SqStack &s){
        s.top = -1;
    }
    
    //判断空栈
    bool StackEmpty(SqStack S){
        if(S.top == -1)
            return true;
        else
            return false;
    }
    
    //进栈
    bool Push(SqStack &S, ElemType x){
        if(S.top == Maxsize-1){
            return false;
        }
        S.data[++S.top] = x;
        return true;
    }
    
    //出栈
    bool Pop(SqStack &S, ElemType &x){
        if(S.top == -1){
            return false;
        }
        x = S.data[S.top--];
        return true;
    }
    
    //读取栈顶元素
    bool GetTop(SqStack S, ElemType &x){
        if(S.top == -1){
            return false;
        }
        x = S.data[S.top];
        return true;
    }
    

    3.2共享栈

    3.2.1定义

    将两个栈底设置在共享空间的两端,栈顶想空间中延伸。
    优点:存取时间复杂度任为O(1),但空间利用更加有效

    3.2.2基础操作
    //判空条件
    1号栈top == -1
    2号栈top == MaxSize
    
    //栈满
    top2-top1 == 1
    

    3.3链式栈

    3.3.1定义

    采用链式存储的栈

    3.3.2实现
    typedef struct LinkNode{
        ElemType data;
        struct LinkNode *next;
    }*LiStack;
    
    //所有的操作都在表头进行
    

    二、队列

    1.队列的定义

    和栈相反,队列是一种先进先出(FIFO)的线性表。它只允许在表的一端插(队尾)入,另一端(队头)删除。

    2.基本操作

    InitQueue(&Q)           //构造一个空队列Q
    DestroyQueue(&Q)        //销毁队列Q
    ClearQueue(&Q)          //将Q清为空队列
    QueueEmpty(Q)           //若Q为空队列,则返回TRUE,否则返回FALSE
    QueueLength(Q)          //返回Q的元素个数,即队列的长度
    GetHead(Q, &e)          //用e返回Q的队头元素
    EnQueue(&Q,e)           //插入元素e为Q的新的队尾元素
    DeQueue(&Q,&e)          //删除Q的队头元素,并用e返回其值
    
  • 相关阅读:
    javaScript删除对象、数组中的null、undefined、空对象、空数组方法
    js数组方法 改变原数组和不改变原数组的方法整理
    js时间戳与日期格式的相互转换
    [原创]jquery更换头像
    css样式大全(copy自一个大佬的博文)
    【原创】实现点击按钮更换表格皮肤效果
    Cookie和Seesion
    常用正则表达式
    【原创】javaWeb完成增删查改功能
    javaWeb完成注册功能
  • 原文地址:https://www.cnblogs.com/zhangliang91/p/12008492.html
Copyright © 2011-2022 走看看