天天看点

栈的定义以及基本运算

栈和队列实质上是俩种受限制的线性表

一 栈的定义:

 栈(stack)是限制仅在表的一端进行插入和删除运算的线性表。

(1)通常称插入、删除的这一端为栈顶(top),另一端称为栈底(bottom)。

(2)当表中没有元素时称为空栈。

(3)栈为后进先出(last in first out)的线性表,简称为lifo表。

栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。

栈的定义以及基本运算

二 栈的顺序存储结构

实质上是运算受限的线性表

(1)顺序栈的类型定义

#define stacksize 100//假定预先分配100元素  

typedef char datatype;//假定栈元素的数据类型为字符  

typedef struct   

{  

    datatype data[stacksize];  

    int top;  

}seqstack;  

注:top用来指示当前栈顶的位置,因为在栈低是不变的  

三 顺序栈的基本操作  

规定: s是seqstack类型指针,s->data[0]为栈底元素  

(1)进栈操作  

进栈时,需要将s->top加1  

  ①s->top==stacksize-1表示栈满  

  ②"上溢"现象--当栈满时,再做进栈运算产生空间溢出的现象。  

(2)出栈操作  

 退栈时,需将s->top减1  

  ①s->top<0表示空栈  

  ②"下溢"现象——当栈空时,做退栈运算产生的溢出现象。  

 置栈空  

  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,int x)  

       if (stackfull(s))  

             printf("stack overflow"); //上溢,退出运行  

       s->data[++s->top]=x;//栈顶指针加1后将x入栈  

 退栈  

  datatype pop(seqstack *s)  

      if(stackempty(s))  

        {  

             printf("stack underflow"); //下溢,退出运行  

             exit(0);  

        }  

      return s->data[s->top--];//栈顶元素返回后将栈顶指针减1  

取栈顶元素  

  datatype stacktop(seqstack *s)  

       if(stackempty(s))  

           {  

             printf("stack is empty");   

           }   

       return s->data[s->top];  

转载:http://blog.csdn.net/xsf50717/article/details/39934051

继续阅读