数据结构和算法学习总结04 线性表---栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构和算法学习总结04 线性表---栈相关的知识,希望对你有一定的参考价值。

栈(Stack)是特殊的线性表,是只允许在一端进行插入和删除的线性表。

允许插入和删除的叫栈顶,反之则是栈底。

栈的插入称为进栈,删除称为出栈。

特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out)。

因为栈是线性表,所以也有顺序表和链表两种形式,一般我们常用顺序表。

从代码中可以看出:与顺序表相比实际上就是插入和删除操作发生了改变

 

#include <iostream>  
using namespace std;  

const int Stack_Size = 5;  

class SqStack  
{  
private:
    int *elem;  
    int top;  
    int stackSize;
public:
    void InitSqStack();        //顺序栈的初始化
    int GetTop();              //获得栈顶元素
    int Length();              //获得当前栈的容量
    void DestroySqStack();     //销毁顺序栈
    void ClearSqStack();       //清空顺序栈
    void Push(int v);          //压栈/入栈/进栈
    int Pop();                 //出栈
    void InputSqStack(int n);  //输入元素
    void OutputSqStack();      //遍历输出
};  



void SqStack::InitSqStack()  
{  
    elem=new int[Stack_Size];  
    top=-1;  
    stackSize=Stack_Size; 
}  

int SqStack::GetTop()
{
    if(top==-1)
        cout<<"空栈"<<endl;
    int e = elem[top];
    return e;
}
int SqStack::Length()
{
    if(top==-1)
        cout<<"空栈"<<endl;
    return top+1;
}  

void SqStack::DestroySqStack()  
{  
    delete[] elem;  
    top=-1;  
    stackSize=0;  
}  

void SqStack::ClearSqStack()
{
    top=-1;
}

void SqStack::Push(int v)  
{  
    if(top==stackSize-1) 
    {
        int *newStack;
        newStack = new int[stackSize + 1];
        for(int i=0;i<=top;i++)
        {
            newStack[i]=elem[i];
        }
        delete[] elem;
        elem = newStack;
        stackSize++;
    }
    elem[++top]=v;  
}  

int SqStack::Pop()  
{  
    int v;  
    if(top==-1)  
        cout<<"空栈"<<endl;  
    v=elem[top--];  
    return v;  
}  

void SqStack::InputSqStack(int n)
{
    int a; 
    cout<<"enter numbers:"<<endl; 
    for (int i = 0; i < n; i++) 
    { 
        cin>>a;
        Push(a);
    } 
}

void SqStack::OutputSqStack()
{ 
    if ((elem == NULL)||(top==-1))
        cout<<"出现错误"<<endl; 
    else 
    { 
        for (int i = 0; i <= top; i++) 
        { 
            cout<<elem[i]<<" "; 
        } 
        cout<<endl;
    } 
}

void main()  
{  
    SqStack S;  
    S.InitSqStack();  
    S.InputSqStack(6);
    S.OutputSqStack();
    cout<<S.GetTop()<<endl;  
    S.Pop(); 
    S.OutputSqStack();
}  

 

以上是关于数据结构和算法学习总结04 线性表---栈的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法学习总结03 线性表---顺序表

第三章学习总结

数据结构算法及线性表总结

20182330《程序设计与设计结构》 第八周学习总结

数据结构与算法学习笔记栈和队列

王艳 201771010127《面向对象程序设计(java)》第十一周学习总结