数据结构-栈的顺序存储及其操作

设计一个线性顺序存储的栈的数据结构,并实现初始化函数、入栈出栈、销毁栈、判空函数、清空栈共六个功能,并在main函数中调用实现

 #include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct {
    int* data;
    int top;//栈的头指针
    int Listsize;//栈的长度
}Stack;
int initStack(Stack& L, int len)
{
    L.data = (int*)malloc(len * sizeof(int));
    if (L.data == NULL)
    {
        return 0;
    }
    L.top = -1;//为了让top指向栈顶元素,此时为空栈
    L.Listsize = len;
}//初始化栈
int pushStack(Stack& L, int e)
{
    if (L.top ==L.Listsize-1)//栈满
    {
        return 0;
    }
    L.top++;
    L.data[L.top] = e;
    if (L.top == L.Listsize - 1)//再次判断栈是否满
    {
        return 0;
    }
    return 1;
}//入栈
int popStack(Stack& L,int &e)//因为要改变e的值,所以要加一个引用符
{
    if (L.top == -1)//栈空
    {
        return 0;
    }
    e = L.data[L.top];
    L.top--;
    if (L.top == -1)//再次判断栈是否为空
    {
        return 0;
    }
    else
    {
        return 1;
    }
}//获取栈顶元素,出栈
void DestoryStack(Stack* L)
{
    free(L->data);
    free(L);
}//销毁栈
void ClearStack(Stack& L)
{
    L.top = -1;
}//清空栈
int EmptyStack(Stack& L)
{
    if (L.top == -1)//栈为空
    {
        return 1;
    }
    else
    {
        return 0;
    }
}//判断栈是否为空
int main()
{
    Stack L;
    int a = 1, b;
    initStack(L, 10);//初始化栈
    printf("入栈:");
    while (a)
    {
        scanf_s("%d", &b);
        a = pushStack(L,b);//a为入栈函数的返回值,栈满返回0,跳出循环
    }
    a = 1;
    while (a)
    {
        int m;
        a = popStack(L,m);//a为出栈函数的返回值,栈空为0,跳出循环
        printf("%d",m);
    }
    printf("\n");
    ClearStack(L);//清空栈
    a = EmptyStack(L);//
    while (a==1)
    {
        printf("请按任意键清空栈");
        system("pause");//让程序暂停,然后按任意键继续进行
        printf("栈已经清空!!!");
        a--;
    }
    return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值