c语言建立栈
顺序存储
我们采用的是动态分配方式来定义顺序存储。
顺序栈本质上是顺序表的简化,由于栈底位置是不变的,所以可以将栈底位置设置在存储空间的基地址上,站定位置随着元素的增删而变化,故用top来指示当前栈顶元素的下一个位置,通常称top为栈顶指针。
有以下几点声明:
- 赋值操作:
*s->top = val; - 栈为空:
s->top == s->base - 栈满:
s->top-s->base >=stacksize
栈的顺序存储定义
#define MAXSTACKSIZE 100
#define STACKINCREMENT 10
typedef struct {
int* base;
int* top;
int stacksize;
}SqStack;
初始化栈
SqStack* InitStack_Sq() {
SqStack* s;
s = (SqStack*)malloc(sizeof(SqStack)); //记得申请空间
s->base = (int*)malloc(MAXSTACKSIZE *sizeof(int));
if (!s->base) {
printf("内存分配失败\n");
return 0;
}
//同时指向一个位置
s->top = s->base;
s->stacksize = MAXSTACKSIZE;
return s;
}
入栈操作
//入栈
void Push_Sq(SqStack* s, int val) {
if (s->top - s->base >= s->stacksize) {
//满栈了
s->base = (int*)realloc(s->base,sizeof(int) * (MAXSTACKSIZE + STACKINCREMENT));
if (!s->base)

本文详细介绍了如何使用C语言实现顺序存储栈的定义、初始化、入栈、出栈、读取栈顶元素、栈中元素个数及栈是否为空等操作。此外,还讲解了双栈的顺序存储结构,包括建立、判断栈空、进栈、出栈等操作。最后,简要提及了链式栈的概念和操作。
最低0.47元/天 解锁文章
2万+





