栈的基本操作(一)
来源:互联网 发布:淘宝裤子褶皱平铺拍摄 编辑:程序博客网 时间:2024/06/01 10:01
1.栈的基本概念
栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除操作的一端称为(Top),栈顶由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是记录栈顶元素在数组位置标号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和操作一般称为入栈和出栈。本篇文章以顺序栈为主。
栈的特点
先进先出(FILO)。
栈的存储结构
栈有两种主要的存储结构:顺序栈和链式栈。栈是一种在操作上稍加限制的线性表,即其本质就是线性表,而线性表有两种主要的存储结构—顺序表和链式表,因此栈有两种存储结构。
栈的数学性质
当n个编号元素以某种顺序进栈,并且可以在任意时刻出栈,所获得的编号元素排列的数目N恰好满足Catalan函数的计算,即
2.顺序栈的基本操作
1.顺序栈定义
typedef struct{ int data[maxSize];//存放栈中元素 int top;//栈顶指针}SqStack;
如图为顺序栈的示意图。
对于顺序栈,一共有4个要素,包括两个特殊状态和两个操作。
两个特殊状态
栈空状态(st.top==-1)
栈满状态(st.top==maxSize-1)两个操作
元素进栈操作:++(st.top);st.data[st.top]=x;。 既然规定了top为1的时候栈空,则元素进栈操作必须是先移动指针,再进入元素,因为数组下标不存在-1。
**元素出栈操作**x=st.data[st.top];–(st.top);。进栈操作的次序决定了出栈操作次序,由于进栈是先变动指针,再进入元素,所以出栈操作必须是先取出元素,再变动指针。
2.顺序栈的基本算法操作
1.初始化顺序栈
初始化一个栈,只需要将栈顶指针置为-1即可。
void initStack(SqStack &st){ st.top=-1;}
2.判断栈空
栈st为空时返回1,否则返回0。
int isEmpty(SqStack st){ if(st.top==-1){ return 1; }else{ return 0; }}
3.进栈算法
int push(SqStack &st,int x){ if(st.top==maxSize-1){//栈满 return 0; } ++(st.top); st.data[st.top]=x;//先移动指针再进栈 return 1;}
4.出栈算法
int pop(SqStack &st,int &x){ if(st.top==-1){ return 0; } x=st.data[st.top];//取出元素再移动指针 --(st.top); return 1;}
1 0
- 栈的基本操作(一)
- 栈(一)——栈的基本操作
- XML文档的基本操作(一)
- 树形控件的基本操作(一)
- 线程的基本操作(一)
- 命令行的基本操作(一)
- 数据表的基本操作(一)
- mongoose的基本操作(一)
- 线性表的基本操作(一)
- MySQL(一)--数据库的基本操作
- Swift字符串的基本操作(一)
- rails应用程序的基本操作(一)
- Linux的基本操作(一)
- Linux基础命令的操作(一)之基本操作
- MySQL数据库基本操作(表的操作一)
- ADO的基本操作(一)
- 文件的基本操作一
- 数据库的基本操作(一)
- javaScript 基础
- Android中WebView的使用
- 工作学习系列一,关于spring的@Autoawared和@Resource
- struts1 配置 websocket
- linux下make工具使用系列3
- 栈的基本操作(一)
- 观察者模式
- 自定义view
- Java中如何遍历Map对象的4种方法
- Linux 目录结构
- 并查集
- Same binary weight
- 简单实现链表1
- 无限级分类 递归和迭代