顺序栈的基本操作

Source

在这里插入图片描述
顺序栈一些简单基本操作的实现,代码如下:

#include<stdio.h>
#include<stdbool.h>

#define MAXSIZE 20        /*存储空间初识分配量*/

typedef int SElemType;//定义SElemType表示int类型typedef 

struct
{
    SElemType data[MAXSIZE];
    int top;            //用于栈顶指针
}SqStack;

//初始化操作,建立一个空栈S
void InitStack(SqStack *S)
{
    S->top = -1;
    printf("初始化成功!\n");
}

//若栈存在,则销毁它    也就是将整个栈都释放掉
void DestroyStack(SqStack* S)
{
    S->top;//如果栈是动态申请的(malloc),用free(S);
    printf("销毁栈成功!\n");
}

//将栈清空
void ClearStack(SqStack* S)
{
    S->top = -1;
    printf("清空成功!\n");
}

//判断栈是否为空
void StackEmpty(SqStack* S)
{
    if (S->top == -1)
    {
        printf("栈为空!\n");
    }
    else
    {
        printf("栈不为空!\n");
    }
}

//若栈存在且非空,用e返回S的栈顶元素
bool GetTop(SqStack* S, SElemType* e)
{
    if (S->top != -1)
    {
        *e = S->data[S->top];
        return true;
    }
    else
    {
        return false;
    }
}

//若栈S存在,插入新的元素e到栈S中并且成为栈顶元素
bool Push(SqStack* S, SElemType e)
{
    if (S->top != -1)
    {
        S->data[++S->top] = e;
        return true;
    }
    else
    {
        return false;
    }
}

//删除栈S中栈顶元素,并且e返回其值
bool Pop(SqStack* S, SElemType* e)
{
    if (S->top != -1)
    {
        *e = S->data[S->top];
        S->top--;
        return true;
    }
    else
    {
        return false;
    }
}

//栈S的元素个数
void StackLength(SqStack* S)
{
    if (S->top != -1)
    {
        printf("栈元素个数为%d个。\n",S->top+1);
    }
    else
    {
        printf("栈为空!\n");
    }
    return;
}

//遍历栈的所有元素
void Show(SqStack* S)
{
    int i=0;
    while (i<=S->top)
    {
        printf("%d,", S->data[i++]);
    }
    printf("\b;\n");
    return;
}

int main()
{
    //如果是指针访问数据成员或成员函数,用->,
    //而如果是某个数据类型的对象访问自己的数据成员和成员函数,用.
    SqStack Sq;
    SElemType e;
    SElemType ee = 99;
    InitStack(&Sq);//初始化栈 并赋值
    for (int i = 0; i < 10; ++i)
    {
        Sq.data[i] = i;
        Sq.top++;
    }
    StackEmpty(&Sq);//判断栈是否为空
    //删除栈顶元素
    if (Pop(&Sq, &e))
    {
        printf("删除成功,栈顶元素为:%d\n", e);
    }
    else
    {
        printf("栈为空,无栈顶元素!\n");
    }
    Show(&Sq);
    //输出栈顶元素
    if (GetTop(&Sq, &e))
    {
        printf("栈顶元素为:%d\n", e);
    }
    else
    {
        printf("栈为空,无栈顶元素!\n");
    }
    Show(&Sq);
    //插入元素
    if (Push(&Sq, ee))
    {
        printf("插入成功!\n");
    }
    else
    {
        printf("插入失败!\n");
    }
    Show(&Sq);
    //清空栈
    ClearStack(&Sq);
    Show(&Sq);
    DestroyStack(&Sq);    
    
    return 0;
}

输出结果如下图所示:
在这里插入图片描述