本文最后更新于 150 天前,其中的信息可能已经有所发展或是发生改变。
1.文件注释内容
/**
* @filename: seqstack.c
* @brief: seqstack
* @author: philia
* @date: 2026/2/1
* @version: ver1.0
* @note none
* CopyRight (c) 2026 philia All Right Reseverd
*/2.头文件
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>3.栈初始化函数及结构体定义
typedef struct
{
int *data; // 指向动态分配数组的指针
int top; // 当前长度
int maxsize; // 最大容量
} SeqStack;
// 顺序栈初始化
SeqStack *SeqStack_init(int maxsize)
{
// 为管理结构体申请内存空间
SeqStack *manager = (SeqStack *)calloc(1, sizeof(SeqStack));
if (!manager)
exit(-1);
// 为栈申请内存空间
manager->data = (int *)calloc(1, maxsize * sizeof(int));
if (!manager->data)
{
free(manager);
printf("栈初始化失败!程序退出!\n");
exit(-1);
}
// 栈初始化
manager->top = -1;
manager->maxsize = maxsize;
return manager;
}4.入栈函数
// 入栈
void push(SeqStack *SeqStack, int value)
{
// 栈已满
if (SeqStack->top + 1 == SeqStack->maxsize)
{
printf("栈空间已满,入栈失败!\n");
return;
}
// 栈未满
SeqStack->data[++SeqStack->top] = value;
printf("入栈成功!值为%d\n", value);
return;
}5.出栈函数
// 出栈
void pop(SeqStack *SeqStack)
{
// 栈为空
if (SeqStack->top == -1)
{
printf("栈为空,出栈失败!\n");
return;
}
// 栈未空
printf("出栈成功! 值为%d\n", SeqStack->data[SeqStack->top]);
SeqStack->top--;
return;
}6.遍历栈
// 遍历栈
void printfstack(SeqStack *SeqStack)
{
// 栈为空
if (SeqStack->top == -1)
{
printf("栈为空,遍历失败!\n");
return;
}
// 栈未空
for (int i = 0; i <= SeqStack->top; i++)
{
printf("data = %d\n", SeqStack->data[i]);
}
return;
}7.销毁栈
// 销毁栈
void destroyStack(SeqStack *SeqStack) {
free(SeqStack->data);
SeqStack->data = NULL;
SeqStack->top = -1;
SeqStack->maxsize = 0;
}8.编写主函数测试
int main()
{
SeqStack *manager = SeqStack_init(10);
push(manager, 10);
push(manager, 20);
pop(manager);
printfstack(manager);
destroyStack(manager);
return 0;
/*
入栈成功!值为10
入栈成功!值为20
出栈成功! 值为20
data = 10*/
}


