zoukankan      html  css  js  c++  java
  • 小朋友学数据结构(2):栈

    小朋友学数据结构(2):栈

    栈是一种先入后出的数据结构。
    如下图所示,入栈的顺序为1、2、3;出栈的顺序则反过来:3、2、1。

     
    stack.png

    可以想象往一个箱子里放书,先放进去的书必然在箱子的底部,最后放进去的书在箱子的顶部。拿书的时候则要先拿顶部(后放进去)的书,最先放进去的书最后才能拿出来。

    栈可以用链表来实现:

    #include<iostream>
    using namespace std;
    
    struct node         //定义栈的结点结构
    {
        int data;
        node *next;
    };
    
    class Stack
    {
        node *top;          //栈顶指针
    
    public:
        Stack()             //构造函数
        {
            top = NULL;
        }
    
        void push(int i);   //入栈函数
    
        int pop();          //出栈函数
    };
    
    void Stack::push(int x) //入栈
    {
        node *newnode = new node;
        newnode->data = x;
        newnode->next = top;
        top = newnode;
    }
    
    int Stack::pop()        //出栈
    {
        int topVal = top->data;
        node *tmp = top;    //tmp指针指向栈顶结点
        top = top->next;    //栈顶指针指向栈顶的下一个结点
        delete tmp;         //删除原先的栈顶结点
    
        return topVal;      //返回被删除的值
    }
    
    int main()
    {
        Stack A;
        int arr[]={3,12,8,9,11};
    
        cout << "入栈顺序: ";
        for(int i = 0; i < 5; i++)
        {
            cout << arr[i] << " ";
            A.push(arr[i]);
        }
        cout << endl;
    
        cout << "出栈顺序: ";
        for(int i = 0; i < 5; i++)
        {
            cout << A.pop() << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    运行结果:

    入栈顺序: 3 12 8 9 11
    出栈顺序: 11 9 8 12 3


  • 相关阅读:
    acm常见错误-持续更新
    学习之旅
    快速幂
    写个管理自我的小工具
    Tree构建
    Sql server学习
    asp.net webAPI学习
    AngularJS数据双向绑定
    虚拟机学习
    wps学习
  • 原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/9607571.html
Copyright © 2011-2022 走看看