#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct seqstack
{
datatype* data;//指向栈空间存储位置的指针
int maxlen; //保存栈的最大长度
int top; //始终表示当前栈内栈顶的位置,叫栈针
}seqstack_t;
// 创建空栈
seqstack_t* createEmptySeqStack(int len)
{
// 申请空间存放栈
seqstack_t* p = (seqstack_t*)malloc(sizeof(seqstack_t));
// 容错判断
if (p == NULL)
{
perror("create stack malloc err");
return NULL;
}
// 初始化
p->maxlen = len;
p->top = -1;
p->data = (datatype*)malloc(sizeof(datatype) * len);
if (p->data == NULL)
{
perror("p->data malloc err");
return NULL;
}
return p;
}
// 判断是否满,满返回1,未满返回0
int isFullSeqStack(seqstack_t* p)
{
return p->top + 1 == p->maxlen;
}
// 入栈
void pushStack(seqstack_t* p, int data)
{
// 容错判断
if (isFullSeqStack(p))
{
printf("push:full\n");
return;
}
// 往上移动栈针
p->top++;
// 将数据入栈
p->data[p->top] = data;
}
// 判断栈空
int isEmptySeqStack(seqstack_t* p)
{
return p->top == -1;
}
// 出栈
int popSeqStack(seqstack_t* p)
{
// 容错判断
if (isEmptySeqStack(p))
{
printf("stack is null");
return -1;
}
// 将栈针向下移动,p->top--
p->top--;
// 将之前栈顶数据取出
return p->data[p->top + 1];
}
// 清空
void clearSeqStack(seqstack_t* p)
{
p->top = -1;
}
// 获取栈顶数据
void getStackTop(seqstack_t* p)
{
if (p->top == -1)
{
printf("栈空\n");
return;
}
printf("栈顶:%d\n", p->data[p->top]);
}
// 求栈长
void stackLength(seqstack_t* p)
{
printf("栈长:%d\n", p->top + 1);
}
// 遍历栈
void printStack(seqstack_t* p)
{
for (int i = p->top; i >= 0; i--)
{
printf("%d-", p->data[i]);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
seqstack_t* p = createEmptySeqStack(5);
pushStack(p, 5);
pushStack(p, 4);
pushStack(p, 3);
pushStack(p, 2);
pushStack(p, 1);
printStack(p);
printf("%d\n", popSeqStack(p));
printStack(p);
printf("%d\n", popSeqStack(p));
printStack(p);
getStackTop(p);
stackLength(p);
return 0;
}
顺序栈操作集合
最新推荐文章于 2024-06-28 11:30:43 发布