使用数组模拟实现顺序栈

123 阅读1分钟

本人纯小白,以下代码是按照《大话数据结构》提供的源码敲的,用于练习:

#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <time.h>
using namespace std;
#define MAXSIZE 20//储存空间分配量
//顺序栈结构
typedef struct
{
    int data[MAXSIZE];
    int top;//栈顶指针
}Sqstack;
int visit(int c)
{
    cout<<c<<" ";
    return 1;
}
//建立空栈
int InitStack(Sqstack *S)
{
    S->top=-1;
    return 1;
}
//将S置为空栈
int ClearStack(Sqstack *S)
{
    S->top=-1;
    return 1;
}
//判断是否为空,空1,不空0
int StackEmpty(Sqstack S)
{
    if(S.top==-1)
    return 1;
    else return 0;
}
//返回栈的长度
int StackLength(Sqstack S)
{
    return S.top+1;
}
//栈不空,则用e返回栈顶元素,并返回1;空返回0
int GetTop(Sqstack S,int *e)
{
    if(S.top!=-1)
    {
        *e=S.data[S.top];
        return 1;
    }
    else return 0;
}
//插入元素e为栈顶元素
int Push(Sqstack *S,int e)
{
    if(S->top==MAXSIZE-1) return 0;
    S->top++;
    S->data[S->top]=e;
    return 1;
}
//删除栈顶元素,用e返回
int Pop(Sqstack *S,int *e)
{
    if(S->top==-1) return 0;
    *e=S->data[S->top];
    S->top--;
    return 1;
}
//显示栈底->栈顶每个元素
int StackTraverse(Sqstack S)
{
    int i=0;
    while(i<=S.top)
    {
        visit(S.data[i++]);
    }
    cout<<endl;
    return 1;
}
int main()
{
    int e;
    Sqstack s;//实例化对象,所以初始化里没有new这一步
    if(InitStack(&s)==1)
    {
        for(int j=1;j<=10;j++)
        {
            Push(&s,j);
        }
    }
    cout<<"栈中元素依次为:";
    StackTraverse(s);
    Pop(&s,&e);
    cout<<"弹出的栈顶元素为:"<<e<<endl;
    cout<<"栈是否为空:"<<StackEmpty(s)<<endl;
    GetTop(s,&e);
    cout<<"栈顶元素为:"<<e<<endl;
    cout<<"栈的长度为:"<<StackLength(s)<<endl;
    ClearStack(&s);
    cout<<"清空后栈是否为空:"<<StackEmpty(s)<<endl;
    system("pause");
    return 0;
}
通过数组模拟栈的过程,可以更加深入的了解栈
第一次使用掘金和写文章,希望可以得到神犇们指导!