顺序栈的实验报告c语言,顺序栈的基本操作(C语言)

这篇博客介绍了如何使用C语言实现顺序栈的基本操作,包括初始化、判断栈是否为空、压栈、弹栈、销毁栈、置空栈、获取栈顶元素、返回栈的长度以及遍历栈中元素。博客通过代码示例详细讲解了每个操作的实现细节,并讨论了在C语言中使用指针和内存管理的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于现在只学了C语言所以就写这个C语言版的栈的基本操作

这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p)

&p是取地址  但是这种用法好像C并不支持 ,C++才支持,所以用

C语言写就需要使用指针

代码如下:

#include

#include

#define STACK_INIT_SIZE 100//储存空间初始分配量

#define STACKINCREMENT 10//存储空间分配增量

#define OK 1

#define ERROR 0

typedef int StackType; //栈元素类型

typedef struct {

StackType *base; //在构造之前和销毁之后,base的值为NULL

StackType *top; //栈顶指针

int stacksize; //当前已分配的存储空间,以元素为单位

}SqStack; //顺序栈

//栈的初始化

int InitStack(SqStack *p) {

p->base = (StackType*)malloc(STACK_INIT_SIZE * sizeof(StackType));

if (p->base == NULL) return ERROR; //内存分配失败

p->top = p->base; //栈顶与栈底相同表示一个空栈

p->stacksize = STACK_INIT_SIZE;

return OK;

}

//判断栈是否为空

int EmptyStack(SqStack *p) {

//若为空栈 则返回OK,否则返回ERROR

if (p->top == p->base) return OK;

else return ERROR;

}

//顺序栈的压入

int Push(SqStack *p,StackType e) {

//插入元素e为新的栈顶元素

if ((p->top - p->base)>= p->stacksize) //栈满,追加储存空间

{

p->base = (StackType*)realloc(p->base, (p->stacksize + STACKINCREMENT) * sizeof(StackType));

if (p->base == NULL) return ERROR;// 储存空间分配失败

p->top = p->base + p->stacksize; //可能有人觉得这句有点多余(我当时也是这么想的 后面有解释)

p->stacksize += STACKINCREMENT;

}

*(p->top) = e;

(p->top)++;

return OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值