首页 > 其他 > 详细

数据结构--栈的学习

时间:2019-11-02 16:40:54      阅读:82      评论:0      收藏:0      [点我收藏+]

栈是应用较广的一种数据结构,分为链栈和顺序栈。

链栈的实现:

#include <iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};
node *top;

void push(int x)
{
    node *n=new node;
    n->data=x;
    n->next=top;
    top=n;
}

void pop()
{
    if(top==NULL)
    {
        cout<<"no elements"<<endl;
    }
    else
    {
        node *p=top;
        cout<<"delete:"<<top->data<<endl;
        top=top->next;
        delete p;
    }
}
 
void show()
{
    node *n=top;
    while(n!=NULL)
    {
        cout<<n->data<<endl;
        n=n->next;
    }
}

int main()
{
    int ch, x;
    do
    {
        cout << "\n1. Push";
        cout << "\n2. Pop";
        cout << "\n3. Print";
        cout << "\nEnter Your Choice : ";
        cin >> ch;
        if (ch == 1)
        {
            cout << "\nInsert : ";
            cin >> x;
            push(x);
        }
        else if (ch == 2)
        {
            pop();
        }
        else if (ch == 3)
        {
            show();
        }
    } while (ch != 0);

    return 0;
}

 

  顺序栈的实现:

#include <iostream>
using namespace std;
int *stack;
int top=0;
void push(int x,int size)
{
    if(top==size)
    {
        cout<<"overflow"<<endl;
    }
    else
    {
        stack[top++]=x;
    }
    
}

void pop()
{
    if(top==0)
    {
        cout<<"no elements"<<endl;
    }
    else
    {
        cout<<stack[--top]<<"deleted"<<endl;
    }
    
}

void show()
{
    for(int i=0;i<top;i++)
    {
        cout<<stack[i]<<endl;
    }
}

void topmost()
{
    if(top==0)
    {
        cout<<"no elements"<<endl;
    }
    else
    {
        cout<<"top elements:"<<stack[top-1]<<endl;
    }
    
}


int main()
{
    
    int size;
    cout<<"enter the stack‘s size"<<endl;
    cin>>size;
    stack=new int[size];
    int ch,x;
    do
    {
        cout<<"1.push"<<endl;
        cout<<"2.pop"<<endl;
        cout<<"3.show"<<endl;
        cout<<"4.show top"<<endl;
        cout<<"enter your choice"<<endl;
        cin>>ch;
        if(ch==1)
        {
            cout<<"\ninsert:";
            cin>>x;
            push(x,size);
        }
        else if (ch==2)
        {
            pop();
        }
        else if(ch==3)
        {
            show();
        }
        else if(ch==4)
        {
            topmost();
        }
        
    }while(ch!=0);
    return 0;
}

栈是一种先入后出的数据结构(LIFO),栈主要对一端进行操作,栈的实现主要是通过一个top指针,出栈和入栈都是通过top指针来进行操作的,对于链栈,入栈时先申请节点,将所需入栈的值赋给节点,再将原先的top指针指向下一个指针,新申请的节点成为新的top;出栈时,将top节点赋给一个新申请的节点,top指向下一个节点,然后删除原先的top节点。对于顺序栈,需要定义其数组的大小,当数组的元素满了时,便不能继续添加元素了,入栈时,将入栈元素赋给stack数组的第top个元素(stack[top]),然后top+1,指向栈顶;出栈时,将栈顶的数组元素删除,即stack[--top]。需要注意的是,对于顺序栈,top指向的是栈顶后面的空元素,栈顶的元素是stack[top-1],而链栈中的top指针指向的直接就是栈顶的元素。

数据结构--栈的学习

原文:https://www.cnblogs.com/ztzzz/p/11782483.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!