s一个栈一共有四个功能:
`入栈(英文名:push)
·判(栈)满(isFull)
·出栈(pop)
·判(栈)空(isEmpty)
栈的C语言定义(结构体)
1.顺序存储的数组,
优点: 节省空间, 操作简单,学习成本较低,易于理解.
缺点: 栈的大小一开始就声明’死’了,不利于使用.
2.非顺序存储的链表.
优缺点:与数组栈正好相反.
数组栈
数组栈,顾名思义,就是基于数组的栈,也是说把一个数组的强大的下标功能阉割掉,并且只能从一头进入(数组头明显更为方便)
所以结构体为:
(为了方便学习,存储类型统一使用int,但是我们一般更习惯在头文件下面给int 起一个别名,原因很简单:这样就这样实现简单的多态,需要将int类型栈改成char类型栈时,只需要改定义的别名中的类型即可)
typedef struct
{
int Data[MaxSize]; // 存储元素的数组
int topIdx; //栈顶指针
}SeqStack;
栈的四个基本操作定义:
//return 0 为false,1为true(下同)
// 将元素推入栈中
int Push(SeqStack &L, int e)
{ // 栈已满
if(L.topIdx==MaxSize -1)
{
return 0;
}
// 加入栈中
L.Data[L.topIdx++] = e;
// 返回自身
return e;
}
// 移除栈顶元素
int Pop(SeqStack &L)
{ // 栈空
if(L.topIdx == 0)
{
//返回失败
return 0;
}
// 打印并返回栈
int val = L.Data[--L.topIdx];
printf("%d ",val);
return val;
}
//判断栈s是否为空
int isEmpty(SeqStack s)
{
// 如果下标在0,说明栈中无元素
if(s.topIdx != 0)
{
return 1;
}
return 0;
}
// 判断栈是否已栈.
Status isFull(SeqStack s)
{
// 已满返回true(1)
if(s.topIdx != MaxSize -1)//之前的定义数组的最大值的下标
{
return 1;
}
return 0;
}
顺序栈
#include#include #define STACK_INIT_SIZE 100 #define STACKINCRMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; //初始化栈 Status InitStack(SqStack *S) { S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK; } //返回栈顶元素 Status GetTop(SqStack *S, SElemType *e) { if(S->top == S->base) return ERROR; *e = *(S->top - 1); return OK; } //元素入栈 Status Push(SqStack *S, SElemType e) { if(S->top - S->base >= S->stacksize) { S->base = (SElemType *)realloc(S->base,(S->stacksize + STACKINCRMENT) * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base + S->stacksize; S->stacksize += STACKINCRMENT; } *S->top++ = e; return OK; } //删除栈顶元素 Status Pop(SqStack *S, SElemType *e) { if(S->top == S->base) return ERROR; *e = *--S->top; return OK; } //清空栈中的元素 Status ClearStack(SqStack *S) { S->top = S->base; return OK; } //销毁栈 Status DestoryStack(SqStack *S) { S->top = S->base; free(S->base); S->top = NULL; S->base = NULL; return OK; } void main() { }
转载:栈(stack) C语言实现 详解_过道-CSDN博客_c语言栈
栈(stack) C语言实现 详解 - 过道 - 博客园



