用C语言创建一个栈

非常感谢我浪哥手把手教会我建栈

下面的代码只是建立一个栈而已

利用栈实现二进制与十进制的转化,请移驾这篇超详细的优秀博文
《【数据结构】手把手教你利用栈实现二进制转换成十进制(C语言)》

首先定义一个结构体叫做sqstack,这个结构体中的数据包含一个top指针,和一个base指针,还有这个结构体本身的大小,其实就是栈的定义

typedef struct
{
	Elemtype *top;
	Elemtype *base;
	int stacksize;
}sqstack;

对栈进行初始化,给栈分配一个存储空间,在未存储数据时,栈顶指针与栈底指针重合

int initstack(sqstack &s)
{
	s.base (Elemtype*)malloc(sizeof(Elemtype) *(maxsize);if(!s.base)exit(0);​
	s.top = s.base;​
	s.stacksize = maxsize;
}

此外,还需要再自定义两个函数,实现栈存储和释放数据的功能,还需满足“先进后出”的特点

进栈

void push(sqstack &s,Elemtype e)
{	//如果空间不够用,利用realloc函数扩展 	
if(s.top - s.base >= s.stacksize)
s.base = (Elemtype *)realloc(s.base(s.stacksize + maxsize) * sizeof(Elemtype));
	if(!s.base)			
            exit(0);*s.top = e;​
	s.top ++;
}

出栈

void pop(sqstack &s,Elemtype &e)
{	
     if(s.top == s.base)
		  return;
     e = *--s.top;
}

现在看完整代码

#include<stdio.h>
#include<stdlib.h>										//malloc,realloc函数 
#include<math.h>										//使用到了pow()函数 
#define maxsize 20
typedef char Elemtype;									//将代码中所有Elemtype改为char 
//定义栈 
typedef struct
{
	Elemtype *top;
	Elemtype *base;
	int stacksize;
}sqstack;
//初始化栈 
int initstack(sqstack &s)
{
	s.base = (Elemtype *)malloc(sizeof(Elemtype) * maxsize);if(!s.base)exit(0);
​	s.top = s.base;
​	s.stacksize = maxsize;

}
//压栈 
void push(sqstack &s,Elemtype e)
{
	//如果空间不够用,利用realloc函数扩展 
	if(s.top - s.base >= s.stacksize)
		s.base = (Elemtype *)realloc(s.base,(s.stacksize + maxsize) * sizeof(Elemtype));
		if(!s.base)
			exit(0);*s.top = e;
​	s.top ++;

}
//弹栈 
void pop(sqstack &s,Elemtype &e)
{
	if(s.top == s.base)
		return;
	e = *--s.top;
}
//栈的当前容量 
int stacklen(sqstack s)
{
	return(s.top - s.base);
}
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘学.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值