栈与队列——关于栈

本篇博客只是为复习整理,略微粗浅勿怪。

在写栈前首先明确什么是栈。那么我们先下一个定义。

是限定仅在表尾插入和删除的线性表,允许插入和删除的一端称为栈顶,另一端称为栈顶。不含任何数据元素的栈称为空栈

(教科书定义)

栈的一个重要特性就是后进先出。

举例来说,比如放置在一平面上一叠摞在一起的盘子,最后放上去的是最先被使用的,取放都从最上面,用栈的概念也就是“栈顶”开始。

基本介绍完毕,下面是栈的结构与代码。

栈的基本操作:

                   1.初始化一个栈。

                   2.解构栈。

                   3.将元素压入栈。

                   4.将元素弹出栈。

                   5.删除栈中元素。

                   6.判断栈是否为空。

                   7.判断栈是否满。(注意在最开始要定义栈的大小)

下面是栈的模板类代码:

 
 
#include<iostream>

using namespace  std;

const  int   StackSize=10;

template<class  T>
class  Stack
{
private:
    T  data[StackSize];
    int top;

public:
    Stack(){top=-1;}
    ~Stack(){};
    void  Getsize(int a){StackSize=a;}
    void  Push(T x);
    T  Pop();
    T  GetTop()
    {
        if(top!=-1)
            return data[top];
    }
    int  Empty(){return (top!=-1)?1:0;}
    void Full()
    {
        if(top==StackSize-1)
            cout<<"栈已满!"<<endl;
        else
            cout<<"栈未满。"<<endl;
    }
};

template<class T>
void  Stack<T>::Push(T x)
{
    if(top==StackSize-1)   throw"shangyi";

    data[++top]=x;
}

template<class T>
T  Stack<T>::Pop()
{
    if(top==-1)  throw"xiayi";
    int y=data[top--];
    return y;
}

int  main()
{
    Stack<int>s;
    int n;
    int x;
    cout<<"请输入要入栈的元素个数:"<<endl;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"请输入第"<<i+1<<"个元素"<<endl;
        cin>>x;
        s.Push(x);
    }
    s.Full();
    cout<<"输出栈内所有元素:"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<s.Pop()<<"    ";
    }
    cout<<endl;
    s.Full();

    return 0;
}


运行截图:


未经允许请勿转载。

 
 


猜你喜欢

转载自blog.csdn.net/lyf3010572059/article/details/80926302