用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
#include										//malloc,realloc函数 
#include										//使用到了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);
}

你可能感兴趣的:(C数据结构学习笔记,数据结构,c算法)