顺序栈的建立

时间:2019-02-14
本文章向大家介绍顺序栈的建立,主要包括顺序栈的建立使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

下个学期学数据结构,其中就有栈,一种很重要的数据结构,所以先学着写一写。

#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn = 20;
//建立顺序栈
typedef int ele; 
typedef struct Stack
{
	ele *top;//栈顶指针
	ele *base;//栈底指针
}Stack;
//初始化栈 
void Init(Stack *s)
{
	//为栈分配内存 
	(s->base) = (ele *)malloc(maxn * sizeof(ele));
	if(!(s->base))
	{
		exit(0);
	}
	s->top = s->base;
	s->len = maxn;
}
//将元素压至栈顶 
void Push(Stack *s,int num)
{
	//当栈的容量不足时,追加栈的容量 
	if(s->top - s->base >= s->len)
	{
		s->base = (ele *)realloc(s->base,(maxn + s->len)*sizeof(ele));//使用realloc函数重新分配内存
		if(!(s->base))
		{
			exit(0);
		}
		s->top = s->base + s->len;
		s->len = s->len + maxn;
	}
	*(s->top) = num;
	s->top++;
}
//弹出栈顶元素 
void Pop(Stack *s,ele *n)
{
	//如果栈空的话就停止 
	if(s->base == s->top)
	{
		return ;
	}
	*n = *--(s->top);
}
//判断是否栈空(空为真) 
bool Empty(Stack *s)
{
	if(s->base == s->top)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
//获取栈内元素个数 
int Len(Stack *s)
{
	return (s->top - s->base);
}
int main(void)
{
	Stack st;
	Init(&st);
	Push(&st,1);
	Push(&st,2);
	printf("栈内元素个数为%d\n",Len(&st));
	int x, y;
	Pop(&st,&x);
	printf("x = %d\n",x);
	if(Empty(&st))
	{
		printf("栈空\n");
	}
	else
	{
		printf("栈不为空\n");
	}
	Pop(&st,&y);
	printf("y = %d\n",y);
	if(Empty(&st))
	{
		printf("栈空\n");
	}
	else
	{
		printf("栈不为空\n");
	}
	return 0;
}

也可以使用STL中的栈容器
在头文件中加入

#include <stack>

常用的几个方法有这些:

stack <int> q;//创建一个名为q的数据类型为整型的栈
q.push();//压入元素进入栈顶
q.pop();//弹出栈顶元素
q.top();//访问栈顶元素(不弹出)
q.empty();//检查是否栈空(空为真)
q.size();//返回栈中元素个数

PS:第一次写博客,有错误请大神指出。