自己手写一个栈【C风格】

cpp 复制代码
#include <iostream>
//栈
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;//状态类型
typedef int ElemType;//元素类型

typedef struct SqStack
{
    ElemType data[MAX_SIZE];
    int top;
};


//初始化,方法1
//SqStack* InitStack()
//{
//    SqStack *s = (SqStack*)malloc(sizeof(SqStack));
//    s->top = 0;
//    return s;
//}
//初始化,方法2
Status InitStack(SqStack** s)
{
    //栈上的指针分配在堆上的内存,**s表示取到栈上指针的地址,才可以修改外部指针
    *s = (SqStack*)malloc(sizeof(SqStack));
    if ((*s) == NULL)return ERROR;
    (*s)->top = 0;
    return OK;
}

Status DestoryStack(SqStack* s)
{
    if (s != NULL)
    {
        free(s);
    }
    return OK;
}
Status ClearStack(SqStack* s)
{
    s->top = 0;
    return OK;
}
Status StackEmpty(SqStack* s)
{
    if (s->top > 0)
        return ERROR;
    return TRUE;
}
Status Push(SqStack* s, ElemType e)
{
    if (s == NULL)return ERROR;
    if ((s->top) >= MAX_SIZE)return ERROR;
    s->data[s->top] = e;
    s->top++;
    return OK;
}
Status Pop(SqStack* s)
{
    if (s == NULL)return ERROR;
    if (s->top == 0)return ERROR;
    s->top--;
}
int StackLength(SqStack* s)
{
    if (s == NULL)return ERROR;
    return s->top;
}

Status StackShow(SqStack* s)
{
    if(s == NULL)return ERROR;
    for (int i = 0; i < s->top; i++)
    {
        printf("%d-->", s->data[i]);
    }
    printf("***全部显示完成!\n");
    return OK;
}

int main()
{

    //方法一初始化
    // SqStack *s  = InitStack();
    //方法2初始化
    SqStack* s;
    InitStack(&s);

    if (s == NULL)
    {
        printf("内存不足!");
        return -1;
    }

    for (int i = 0; i < 10; i++)
    {
        Push(s, i);
    }
    StackShow(s);

    printf("删除5个元素:\n");
    Pop(s);
    Pop(s);
    Pop(s);
    Pop(s);
    Pop(s);
    StackShow(s);

    printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));
    ClearStack(s);
    printf("清空后:\n");
    StackShow(s);
    printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));

    DestoryStack(s);
    s = NULL;

    return 0;
}
相关推荐
Yeats_Liao2 分钟前
Java 软件测试(三):Mockito打桩与静态方法模拟解析
java·开发语言
JAVA学习通3 分钟前
RabbitMQ---面试题
java·开发语言
艾菜籽9 分钟前
UDP套接字的使用
java·开发语言·网络
云天徽上19 分钟前
【数据可视化-111】93大阅兵后的军费开支情况———2024年全球军费开支分析:用Python和Pyecharts打造炫酷可视化大屏
开发语言·python·信息可视化·pyecharts
zhangfeng113334 分钟前
错误于make.names(vnames, unique = TRUE): invalid multibyte string 9 使用 R 语言进行数据处理时
开发语言·r语言·生物信息
七夜zippoe41 分钟前
缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(三)
java·开发语言·缓存
郝学胜-神的一滴1 小时前
Linux命令行的核心理念与实用指南
linux·运维·服务器·开发语言·程序人生
qq_433554541 小时前
C++ Dijkstra堆优化算法
开发语言·c++·算法
boonya1 小时前
Java内存模型与线程私有共享区域与直接内存的理解
java·开发语言·内存模型
qq_172805591 小时前
Go 语言 PDF 生成库综合比较与实践指南
开发语言·golang·pdf