栈之顺序栈
来源:互联网 发布:大数据最重要的职位 编辑:程序博客网 时间:2024/05/22 01:54
我是辛勤的小蜜蜂~~~哈哈~~码代码坐等比赛开始,我猜今晚皇马5:1大胜塞维利亚
下面来介绍下顺序栈。我们知道,栈具有一个栈顶指针,有些教材中的顺序栈的栈顶指针指向栈顶元素的下一个位置,但本文中的栈顶指针都指向栈顶元素。其中,S->data[0]是栈底元素,top是栈顶指针。
#include<cstdio>#define StackSize 100 //假定预分配的栈空间最多为100个元素typedef char Datatype; //假定栈元素的数据类型为字符typedef struct { Datatype data[StackSize]; int top;}SeqStack;//********************************栈的一些基本操作**********************************void InitStack(SeqStack *S){ ////将顺序栈置空 S->top=-1;}int StackEmpty(SeqStack *S){ //判断顺序栈是否为空,若为空,则返回真,否则返回假 return S->top==-1;}int StackFull(SeqStack *S){ //判断栈是否满了,若满了则返回真,否则返回假 return S->top==StackSize-1;}void Push(SeqStack *S,Datatype x){ //进栈操作 if(StackFull(S)){ printf("Stack overflow\n"); //上溢,退出运行 return ; } S->data[++S->top]=x; //将栈顶指针加1后讲x入栈}void Pop(SeqStack *S){ //出栈操作 if(StackEmpty(S)){ printf("Stack underflow\n"); //下溢,退出运行 return ; } S->top--; //将栈顶指针减1}Datatype StackTop(SeqStack *S){ //取栈顶元素 if(StackEmpty(S)){ //栈空则无法取栈顶元素 printf("Stack is empty!\n"); return '?'; } return S->data[S->top];}void CreateStack(SeqStack *S){ //建立一个栈 char ch; while((ch=getchar())!='\n'){ Push(S,ch); } return ;}//***********************************测试函数********************************int main(){ SeqStack *S; InitStack(S); printf("输入一个字符串,来建立一个字符顺序栈:\n"); CreateStack(S); printf("栈已建好!\n"); printf("栈顶元素是:%c\n",StackTop(S)); printf("弹出栈顶元素:\n"); Pop(S); printf("此时栈顶元素为:%c\n",StackTop(S)); printf("将元素‘Z’进栈:\n"); Push(S,'z'); printf("此时栈顶元素是:%c\n",StackTop(S)); return 0;}
测试样例:
设想如果将数组的一端固定,看做栈底,另一端看做活动的,那么我们可以用数组来模拟顺序栈,具体代码如下。此时的指针相当于数组的指标。但此时对于多个栈的情况,处理起来不太方便,而且以下代码不具有很好的封装性。程序的具体运行样例与上一段代码相同,就不再贴出了。错误之处,还请指出!
#include<cstdio>#define StackSize 100 //假定预分配的栈空间最多为100个元素typedef char Datatype; //假定栈元素的数据类型为字符int top; //栈顶指针,这里是全局变量,不太好//********************************栈的一些基本操作**********************************void InitStack(){ //将顺序栈置空 top=-1;}int StackEmpty(){ //判断顺序栈是否为空,若为空,则返回真,否则返回假 return top==-1;}int StackFull(){ //判断栈是否满了,若满了则返回真,否则返回假 return top==StackSize-1;}void Push(Datatype *S,Datatype x){ //进栈操作 if(StackFull()){ printf("Stack overflow\n"); //上溢,退出运行 return ; } S[++top]=x; //将栈顶指针加1后讲x入栈}void Pop(){ //出栈操作 if(StackEmpty()){ printf("Stack underflow\n"); //下溢,退出运行 return ; } top--; //将栈顶指针减1}Datatype StackTop(Datatype *S){ //取栈顶元素 if(StackEmpty()){ //栈空则无法取栈顶元素 printf("Stack is empty!\n"); return '?'; } return S[top];}void CreateStack(Datatype *S){ //建立一个栈 char ch; while((ch=getchar())!='\n'){ Push(S,ch); } return ;}//***********************************测试函数********************************int main(){ Datatype Stack[StackSize]; InitStack(); printf("输入一个字符串,来建立一个字符顺序栈:\n"); CreateStack(Stack); printf("栈已建好!\n"); printf("栈顶元素是:%c\n",StackTop(Stack)); printf("弹出栈顶元素:\n"); Pop(); printf("此时栈顶元素为:%c\n",StackTop(Stack)); printf("将元素‘Z’进栈:\n"); Push(Stack,'z'); printf("此时栈顶元素是:%c\n",StackTop(Stack)); return 0;}
0 0
- 栈之顺序栈
- 栈之顺序栈
- 栈之顺序栈
- 栈之顺序栈
- 栈之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- DS之顺序栈
- 数据结构之顺序栈
- C#之顺序栈
- 栈之顺序实现
- 数据结构之顺序栈
- 北方之星Java面试题
- 线段树
- 第4章 树 - 二叉搜索树数据结构实现
- SEO学习笔记(四)
- HDU 4941 Magical Forest(离散化)
- 栈之顺序栈
- uva--10220
- 电脑问题123
- php中对MYSQL操作之预处理技术(2)数据库dql查询语句
- HBase的伪分布模式安装
- SEO学习笔记(五)
- cocos2d-x渲染流程分析
- linq嵌套、联合查询
- SEO建议