• 线性表之栈


    栈的定义:

      一种只能在一端进行插入或删除操作的线性表被称为栈,其中允许删除或插入的一端为栈顶,另一端为栈底,栈底固定不变;

      栈的特点:先进后出,例如弹夹,先装的子弹最后才能出;

      按照存储结构可以分为两种栈:

    • 顺序栈
    • 链式栈

    栈的结构体定义:

    顺序栈:

      

    //顺序栈的结构体定义
    typedef struct {
        int data[MaxSize];
        //栈顶指针
        int top;
    }SqStack;

    链式栈:

    //链栈结构体定义
    typedef struct LNode {
        int data;
        struct LNode* next;
    }LNode;

      ps:有没有发现链式栈和单链表定义一模一样;其实栈的本质就是受约束的线性表;

    基本算法:

    判断栈是否为空:

    bool IsEmptyS(SqStack s) {
        if (s.top == -1)
            return true;
        else
            return false;
    }

    栈是否为为满:

    bool IsFullS(SqStack s) {
        if (s.top == MaxSize - 1)
            return true;
        else
            return false;
    }

    栈的初始化:

    void InitialStack(SqStack &s) {
        //规定top=-1时为空栈
        s.top = -1;
    }

    入栈:

    bool push(SqStack &s, int x) {
        if (s.top == MaxSize - 1)
            return false;
        s.data[++s.top] = x;
        return true;
    }

    出栈:

    int pop(SqStack &s) {
        if (s.top == -1)
            return false;
        return s.data[s.top--];
        
    }

    打印整个栈:

    void PrintStack(SqStack s) {
        if (s.top == -1) {
            cout << "栈空,无法打印" << endl;
        }
        int i = s.top;
        for (i; i >= 0; i--) {
            cout << s.data[s.top--]<<"	";
        }
    
        cout << endl;
    }

    测试用例:

    int main()
    {
        
        int a[4] = { 1,2,3,4 };
        SqStack s;
        InitialStack(s);
        cout << "顺序栈测试" << endl;
        
        for (int i = 0; i < 4; i++) {
            push(s, a[i]);
        }
        PrintStack(s);
    
        cout << "2入栈" << endl;
        push(s, 2);
        cout << "10入栈" << endl;
        push(s, 10);
        PrintStack(s);
        cout << "出栈第一次	" << pop(s) << endl;
        cout << "出栈第二次	" << pop(s) << endl;
        cout << "出栈第三次	" << pop(s) << endl;
    
        PrintStack(s);
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    设计模式外观模式
    SQL Server高级查询
    电脑双屏下如何设置程序在第二屏幕运行
    Vistual Studio自带的计划任务功能
    SQL Server定时创建动态表
    访问网站出现空白页面的原因和解决方法
    微软老将Philip Su的离职信:回首12年职场生涯的心得和随笔
    SQL Server更改字段名
    刷新本页与父页的两条代码
    色彩感情
  • 原文地址:https://www.cnblogs.com/zuixime0515/p/9613922.html
Copyright © 2020-2023  润新知