栈的基本操作(一)

来源:互联网 发布:淘宝裤子褶皱平铺拍摄 编辑:程序博客网 时间:2024/06/01 10:01

1.栈的基本概念

栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除操作的一端称为(Top),栈顶由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是记录栈顶元素在数组位置标号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和操作一般称为入栈和出栈。本篇文章以顺序栈为主。

栈的特点

先进先出(FILO)。

栈的存储结构

栈有两种主要的存储结构:顺序栈和链式栈。栈是一种在操作上稍加限制的线性表,即其本质就是线性表,而线性表有两种主要的存储结构—顺序表和链式表,因此栈有两种存储结构。

栈的数学性质

当n个编号元素以某种顺序进栈,并且可以在任意时刻出栈,所获得的编号元素排列的数目N恰好满足Catalan函数的计算,即
这里写图片描述

2.顺序栈的基本操作

1.顺序栈定义

typedef struct{    int data[maxSize];//存放栈中元素    int top;//栈顶指针}SqStack;

如图为顺序栈的示意图。
这里写图片描述

对于顺序栈,一共有4个要素,包括两个特殊状态和两个操作。

  1. 两个特殊状态
    栈空状态(st.top==-1)
    栈满状态(st.top==maxSize-1)

  2. 两个操作
    元素进栈操作:++(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
原创粉丝点击