非常感谢我浪哥手把手教会我建栈
下面的代码只是建立一个栈而已
利用栈实现二进制与十进制的转化,请移驾这篇超详细的优秀博文
《【数据结构】手把手教你利用栈实现二进制转换成十进制(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);
}