码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-13 23:17:48      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:ons   number   include   i++   iostream   inpu   enter   name   插入   

栈(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 线性表---栈

标签:ons   number   include   i++   iostream   inpu   enter   name   插入   

原文地址:http://www.cnblogs.com/yourallworld/p/7510747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!