c语言实现一个栈结构

虽然以前写代码的时候已经熟悉了栈的结构,但没系统性学习过,正好现在在读一本书,先用c语言实现一个简单的栈结构先

#include <stdio.h>
#include <stdlib.h>

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

//栈内元素
typedef struct StackItem
{
	int value;
};

//栈结构
typedef struct Stack
{
	StackItem* base;
	StackItem* top;
	int stracksize;
};


void InitStack(Stack &s) {
	//构造一个空栈
	s.base = (StackItem*)malloc(STACK_INIT_SIZE * sizeof(StackItem));
	if (!s.base)exit(1);
	s.top = s.base;
	s.stracksize = STACK_INIT_SIZE;
}
int GetTop(Stack& s,StackItem &e) {
	//若栈不空,则用e返回s的栈顶元素,并返回1,否则返回0
	if (s.top == s.base)
		return 0;
	e = *(s.top - 1);
	return 1;
}
void Push(Stack& s, StackItem e) {
	//插入元素e为新的栈顶元素
	if (s.top - s.base >= s.stracksize) {
		//栈满,追加存储空间
		s.base = (StackItem*)realloc(s.base, (s.stracksize + STACKINCREMENT) * sizeof(StackItem));
		if (!s.base)exit(1);
		s.top = s.base + s.stracksize;
		s.stracksize += STACKINCREMENT;
	}
	*s.top++ = e;
}

int Pop(Stack& s, StackItem &e) {
	//若栈不为空,则删除栈顶元素并用e返回其值并返回1,否则返回0
	if (s.top == s.base)return 0;
	e = *--s.top;
	return 1;
}

int StackLength(Stack& s) {
	//返回栈的长度
	return s.top - s.base;
}

int StackEmpty(Stack& s) {
	//判断栈是否为空,如果是返回1,否则返回0
	return s.top == s.base ? 1 : 0;
}

void ClesrStack(Stack &s) {
	//清空栈
	s.top = s.base;
}
void DestoyStack(Stack& s) {
    //销毁栈
	s.top = s.base;
	free(s.base);
	s.stracksize = 0;
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰宝IWZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值