创建一个栈存储结构,并且写入一些对栈的基本的操作
2016-04-30 09:53
302 查看
什么是栈:简单的说就是一个容器,一个瓶子,我们向瓶子里面放糖果,当想吃糖果的时候,将瓶子里的糖果再倒出来。我们要实现的就是怎样创建一个瓶子,并且怎样很容易的向里面添加糖果,向吃糖果的时候可以拿出来,自然我们拿出来的糖果是瓶子上面的糖果,也就是最后放进去的糖果。
我们继续想:要模拟这样的一个瓶子,我们需要几个变量,简单点,我们需要知道瓶子的高度,瓶子盖子,和瓶子底部。这样我们就可以很形象的描述出一个瓶子。
typedef struct{SElemType *base; SElemType *Top; int stackSize;}SqStack;
其中SElemType就是我们向瓶子里面放的糖果。上面进行的是对瓶子的一个描述,然而瓶子并未出现,怎样来让瓶子出现,一个我们能够“碰的到”瓶子,一个可以让我操作的瓶子。
int InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base) return 0;
S->top=S->base;
S->stackSize=0;
return 1;
}
上面就是初始化一个栈,也就是我们的瓶子出现了。现在我们需要做的是向瓶子里面添加糖果
int Push(SqStack *S,SElemType e)
{
//你可以不断的输入,改变e的值,然后调用这个函数,就可以实现向栈中插入数据元素
if(S->top-S->base>=S->stackSize)
{
S->base=(SElemType *)realloc(S->base,(S->stackSize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base+S->stackSize;
S->stackSize=S->stackSize+STACKINCREMENT;
}
*S->top++=e;
return OK;
}
//然后我们需要做的是,可以删除栈顶的元素,并且将栈顶元素存储到e中
int Pop(SqStack *S,SElemType e)
{
if(S->top==S->base)
return ERRIR;
e=*(--S->top);
return OK;
}
//获取栈顶的元素
int getTop(SqStack *S,SElemType e)
{
if(S->base==S->top)
return ERROR;
e=*(S->top-1);
return OK;
}
//遍历栈中的元素
int goEveryElem(SqStack *S)
{
if(S->top==S->base)
return ERROR;
int length=S->top-S->base;
int i=0;
S->top=S->base;
for(S->top,i;i<=length;i++,S->top++)
{
cout<<*(S->top);
}
}
上面就是对栈的一个基本的了解,当然还有很多对栈的操作,这个地方也就不一一的叙述,在下面的文章中将会继续 的讲解栈的一些应用。
我们继续想:要模拟这样的一个瓶子,我们需要几个变量,简单点,我们需要知道瓶子的高度,瓶子盖子,和瓶子底部。这样我们就可以很形象的描述出一个瓶子。
typedef struct{SElemType *base; SElemType *Top; int stackSize;}SqStack;
其中SElemType就是我们向瓶子里面放的糖果。上面进行的是对瓶子的一个描述,然而瓶子并未出现,怎样来让瓶子出现,一个我们能够“碰的到”瓶子,一个可以让我操作的瓶子。
int InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base) return 0;
S->top=S->base;
S->stackSize=0;
return 1;
}
上面就是初始化一个栈,也就是我们的瓶子出现了。现在我们需要做的是向瓶子里面添加糖果
int Push(SqStack *S,SElemType e)
{
//你可以不断的输入,改变e的值,然后调用这个函数,就可以实现向栈中插入数据元素
if(S->top-S->base>=S->stackSize)
{
S->base=(SElemType *)realloc(S->base,(S->stackSize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base+S->stackSize;
S->stackSize=S->stackSize+STACKINCREMENT;
}
*S->top++=e;
return OK;
}
//然后我们需要做的是,可以删除栈顶的元素,并且将栈顶元素存储到e中
int Pop(SqStack *S,SElemType e)
{
if(S->top==S->base)
return ERRIR;
e=*(--S->top);
return OK;
}
//获取栈顶的元素
int getTop(SqStack *S,SElemType e)
{
if(S->base==S->top)
return ERROR;
e=*(S->top-1);
return OK;
}
//遍历栈中的元素
int goEveryElem(SqStack *S)
{
if(S->top==S->base)
return ERROR;
int length=S->top-S->base;
int i=0;
S->top=S->base;
for(S->top,i;i<=length;i++,S->top++)
{
cout<<*(S->top);
}
}
上面就是对栈的一个基本的了解,当然还有很多对栈的操作,这个地方也就不一一的叙述,在下面的文章中将会继续 的讲解栈的一些应用。
相关文章推荐
- Single Sign On
- 跨程序共享数据,探究内容提供器
- Elasticsearch 数据建模 - 处理关联关系(1)
- Maven学习总结(18)——深入理解Maven仓库
- Maven学习总结(18)——深入理解Maven仓库
- bzoj 4513: [Sdoi2016]储能表
- Tomcat7并发优化
- Android ActivityManagerService 基本构架详解
- Maven学习总结(18)——深入理解Maven仓库
- tomcat7并发和线程数
- Errors while building APK. You can find the errors in the 'Messages' view.
- 学习笔记 第十周 第二篇
- Less10分钟入门
- 2331: [SCOI2011]地板
- Java千百问_06数据结构(001)_java中数据类型是什么
- python_正则表达式(一)基础标识符
- bzoj2527: [Poi2011]Meteors
- Bebug与Release版本
- php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
- 将Ubuntu 15.10升级到Ubuntu 16.04