设为首页 加入收藏

TOP

DS之顺序栈
2015-07-24 11:34:15 来源: 作者: 【 】 浏览:4
Tags:顺序

顺序栈的基本操作

0基本操作前的准备

#include 
using namespace std;
//两个C语言的头文件库
#include 
#include 
//以下是宏定义
#define OK 1
#define ERROW 0
#define OVERFLOWE -2
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
//以下是类型重新定义
typedef int SElemType;//重新定义SElemType为int型
typedef int Status;//重新定义Status为int型
//下面的是栈的定义和基本操作
typedef struct{//重新定义SqStck为结构类型
	SElemType *base;//栈底指针
	SElemType *top;//栈顶指针
	int stacksize;//栈的当前可使用的最大容量
}SqStack;
1构造一个空栈

//1构造一个空栈
Status InitStack(SqStack &S)
{
	S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S.base)
	{
		exit(OVERFLOW);//存储分配失败
	}
	S.top=S.base;
	S.stacksize=STACK_INIT_SIZE;
	return OK;
}
2判断栈是否为空

//2判断栈是否为空
Status StackEmpty(SqStack S)
{
	if(S.base==S.top)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
3清空一个栈

//3清空一个栈
Status ClearStack(SqStack &S)
{
	S.top=S.base;
	S.stacksize=STACK_INIT_SIZE;
	return OK;
}
4销毁一个栈

//4销毁一个栈
Status DestroyStack(SqStack &S)
{
	delete S.base;
	S.base=NULL;
	S.top=NULL;
	S.stacksize=0;
	return OK;
}
5取栈的长度

//5取栈的长度
Status StackLength(SqStack S)
{
	return S.top-S.base;
}
6取栈顶的元素

//6取栈顶元素
Status GetTop(SqStack S,SElemType &e)
{
	if(S.top==S.base)
	{
		return ERROW;
	}
	e=*(S.top-1);
	return OK;
}
7出栈

//7出栈
Status Pop(SqStack &S,SElemType &e)
{
	if(S.top==S.base)
	{
		return ERROW;
	}
	e=*--S.top;
	return OK;
}
8进栈

//8进栈
Status Push(SqStack &S,SElemType e)
{
	if(S.top-S.base>=S.stacksize)
	{
		//栈满追加存储空间
		SElemType *newbase=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
		if(!newbase)
		{
			exit(OVERFLOW);
		}
		S.base=newbase;
		S.top=S.base+S.stacksize;
		S.stacksize+=STACKINCREMENT;
	}
	*S.top++=e;
	return OK;
}
9栈元素的遍历

//9栈元素的遍历
Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{
	while(S.top>S.base)
	{
		visit(*S.base++);
	}
	return OK;
}
//遍历栈元素的输出
Status sc(SElemType i)
{
	return i;
}
10主函数

//主函数
int main()
{
	SqStack s;
	SElemType tp1;
	SElemType tp2;
	InitStack(s);
	cout<<"0-9依次入栈并输出:"<

输出的结果为:

\

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关系型数据库V.S.非关系型数据库 下一篇DS之栈实现数制转换

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)