学习笔记 栈(一.栈的顺序存储结构)
2015-11-01 21:23
351 查看
快考试了 来整理。
栈中的数据元素用一个预设的足够长度的一维数组来实现
用一个int 类型的数据来作为栈顶的指针 指明栈顶的位置
因为是数组吗实际就是用他来表示栈顶的下标
顺序栈的类型描述如下
这里要说的是因为我的data类型就是int 所有我就直接用了int来定义data[],
定义一个指向顺序栈的指针
0的下标端设为栈底 所以控制空栈的时候让
如果有入栈元素那就让栈顶指针加一
下来看一下下顺序栈的基本操作
1.置空栈:建立一个栈空间 然后初始化栈顶指针
2.判空栈:判断他的栈顶指针是不是等于-1
3.判满栈:要看他的栈顶指针是不是已经到了数组的最后一个 因为数组下标是从0开始的 所以最后一个下标就是MAXSIZE-1
4.入栈:先判断是不是满栈了 然后把指针指到要入的位置 然后赋上数据
5.出栈 :先判断栈是否为空 然后用一个数据指针带回 s->top–;只能从栈顶出栈
6.得到栈顶元素:判空 然后返回栈顶元素就好了
要注意出栈和得到栈顶元素的区别 出栈改变了栈顶而得到栈顶元素并没有改变栈顶
基础大概就是这么多
栈中的数据元素用一个预设的足够长度的一维数组来实现
datatype data[MAXSIZE];
用一个int 类型的数据来作为栈顶的指针 指明栈顶的位置
因为是数组吗实际就是用他来表示栈顶的下标
int top;
顺序栈的类型描述如下
typedef struct { int data[MAXSIZE]; int top; }SeqStack;
这里要说的是因为我的data类型就是int 所有我就直接用了int来定义data[],
定义一个指向顺序栈的指针
SeqStack *s;
0的下标端设为栈底 所以控制空栈的时候让
s->top = -1;
如果有入栈元素那就让栈顶指针加一
s->top++;
下来看一下下顺序栈的基本操作
1.置空栈:建立一个栈空间 然后初始化栈顶指针
SeqStack *Init_SeqStack() { SeqStack *s; s = (SeqStack *)malloc(sizeof(SeqStack));//申请空间 s->top = -1;//栈顶指针指向-1 return s; }
2.判空栈:判断他的栈顶指针是不是等于-1
int Empty_SeqStack(SeqStack *s)//判空栈 { if(s->top==-1) { return 1;//是空栈返回-1 } else return 0;//不是空栈返回0 }
3.判满栈:要看他的栈顶指针是不是已经到了数组的最后一个 因为数组下标是从0开始的 所以最后一个下标就是MAXSIZE-1
int Full_SeqStack(SeqStack *s)//判断栈是否满了 { if(s->top==MAXSIZE-1) { return 1;//满返回1 } else return 0;不满返回0 }
4.入栈:先判断是不是满栈了 然后把指针指到要入的位置 然后赋上数据
int Push_SeqStack(SeqStack *s, int x)//入栈操作 { if(Full_SeqStack(s))//判断是否满栈 如果满栈则不能入栈 返回0 { return 0; } else { s->top++;//指针+1 s->data[s->top]=x;//赋值 return 1; } }
5.出栈 :先判断栈是否为空 然后用一个数据指针带回 s->top–;只能从栈顶出栈
int Pop_SeqStack( SeqStack *s,int *x)//出栈 { if(Empty_SeqStack(s))//判断是否为空 { return 0; } else { *x = s->data[s->top];//带回 s->top--;栈顶下移一个 return 1; } }
6.得到栈顶元素:判空 然后返回栈顶元素就好了
int Top_SeqStack(SeqStack *s) { if(Empty_SeqStack(s))//判空栈 { return 0; } else { return(s->data[s->top]);//返回栈顶元素但并没有丢失 } }
要注意出栈和得到栈顶元素的区别 出栈改变了栈顶而得到栈顶元素并没有改变栈顶
基础大概就是这么多
相关文章推荐
- 组合数取模
- OC中的集合详解
- hdoj 2803 The MAX 【水题】
- 字符串处理问题1
- SFB2015 多SIP域
- hdoj 2579 Dating with girls(2) 【BFS 取余标记】
- java多线程之run() 与start() 区别
- 《NoSQL精粹》各章要点
- 神秘的三位数 有这样一个3位数,组成它的3个数字阶乘之和正好等于它本身。即:abc = a! + b! + c!
- 高斯判别分析算法及其python实现
- Android 实现一个立方体旋转效果
- 大变革的IT时代网络及硬件工程师该何去何从?
- 大变革的IT时代网络及硬件工程师该何去何从?
- 12个有趣的C语言面试题
- Android 检测键盘是否显示及隐藏键盘
- 《C++ primer》英文第五版阅读笔记(六)——类型处理
- 《剑指offer》——树的子结构
- tomcat中给server.xml加入<Context>元素
- 关于public class 和 class声明类的区别
- ProgressDialog的使用:请稍等提示