• 第三章 栈和队列


    顺序栈的实现

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N=1e4+5;
    class Seqstack
    {
    public:
        Seqstack();
        ~Seqstack(){}
        void Push(int k);
        int Pop();
        bool Empty();
        int Gettop();
    private:
        int data[N];
        int top;
    };
    Seqstack::Seqstack()
    {
        top=-1;
    }
    void Seqstack::Push(int k)
    {
        if(top==N)
        {
            cout<<"上溢"<<endl;return;
        }
        data[++top]=k;
    }
    int Seqstack::Pop()
    {
        if(top==-1)
            return -1;
        return data[top--];
    }
    int Seqstack::Gettop()
    {
        if(top==-1)
            return -1;
        return data[top];
    }
    bool Seqstack::Empty()
    {
        if(top==-1)
            return 1;
        return 0;
    }
    int main()
    {
        Seqstack s=Seqstack();
        s.Push(1);
        s.Push(2);
        cout<<s.Pop()<<endl;
        cout<<s.Gettop()<<endl;
        if(s.Empty()!=1)
            cout<<"非空"<<endl;
        else
            cout<<"空"<<endl;
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    链栈的实现

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N=1e4+5;
    struct Node
    {
        int x;
        Node *nxt;
    };
    class Linkstack
    {
    public:
        Linkstack();
        ~Linkstack();
        void Push(int k);
        int Pop();
        bool Empty();
        int Gettop();
    private:
        Node *top;
    };
    Linkstack::Linkstack()
    {
        top=new Node;
        top->nxt=NULL;
    }
    Linkstack::~Linkstack()
    {
        Node *p=top;
        while(top!=NULL)
        {
            top=top->nxt;
            delete p;
            p=top;
        }
    }
    void Linkstack::Push(int k)
    {
        Node* s=new Node;
        s->x=k;
        s->nxt=top;
        top=s;
    }
    int Linkstack::Pop()
    {
        if(top->nxt==NULL)
            return -1;
        int x=top->x;
        Node *p=top;
        top=top->nxt;
        delete p;
        return x;
    }
    int Linkstack::Gettop()
    {
        return top->x;
    }
    bool Linkstack::Empty()
    {
        if(top->nxt==NULL)
            return 1;
        return 0;
    }
    int main()
    {
        Linkstack ls=Linkstack();
        if(ls.Empty()!=1)
            cout<<"非空"<<endl;
        else
            cout<<"空"<<endl;
        ls.Push(1);
        ls.Push(22);
        cout<<ls.Pop()<<endl;
        cout<<ls.Gettop()<<endl;
        ls.Pop();
        if(ls.Empty()!=1)
            cout<<"非空"<<endl;
        else
            cout<<"空"<<endl;
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    循环队列的实现

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N=1e4+5;
    class Cirqueue
    {
    public:
        Cirqueue();
        ~Cirqueue(){};
        void en_que(int k);
        int de_que();
        int Gethead();
        bool Empty();
    public:
        int data[N];
        int fr,re;
    };
    Cirqueue::Cirqueue()
    {
        fr=re=N-1;
    }
    void Cirqueue::en_que(int k)
    {
        if((re+1)%N==fr)
        {
            cout<<"上溢"<<endl;return ;
        }
        re=(re+1)%N;
        data[re]=k;
    }
    int Cirqueue::de_que()
    {
        if(re==fr)
        {
            cout<<"下溢"<<endl;return 0;
        }
        fr=(fr+1)%N;
        return data[fr];
    }
    int Cirqueue::Gethead()
    {
        return data[(fr+1)%N];
    }
    bool Cirqueue::Empty()
    {
        if(fr==re)
            return 1;
        else
            return 0;
    }
    int main()
    {
        Cirqueue cq=Cirqueue();
        cq.en_que(1);
        cq.en_que(22);
        cq.en_que(33);
        cout<<cq.de_que()<<endl;
        cout<<cq.de_que()<<endl;
        cout<<cq.Gethead()<<endl;
        cq.de_que();
        cout<<cq.Empty()<<endl;
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    链队列的存储实现

  • 相关阅读:
    RESTful 接口设计
    概率论与数理统计_第1章_几何概型
    C语言static关键字实现执行进度显示demo
    .NET EF配置数据库链接
    Markdown
    Python 元类详解
    web前端大一实训 HTML+CSS+JavaScript王者荣耀(60页) web课程设计网页规划与设计 HTML期末大作业 HTML网页设计结课作业
    Java_泛型 详解总结 (精心打磨多次,一篇看懂泛型)
    搭建HTTP服务器,接收镜像构建触发器请求自动部署项目
    Linux权限介绍
  • 原文地址:https://blog.csdn.net/weixin_51934288/article/details/125243624