码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构基础——栈(先进后出)

时间:2019-03-31 14:06:25      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:define   修改   status   链栈   return   sel   失败   type   顺序   

一、顺序栈的表示与实现

1.顺序栈的存储结构

#define MAXSIZE 100

typedef struct

{

      SElemType  *base;(栈底指针,始终指向栈底的位置)

      SElemType  *top;(栈顶指针)

      int stacksize;

}SqStack;

2.初始化

status InitStack(SqStack &S)

{

         S.base= new SElemType[MAXSIZE];

         if(!S.base)  exit (OVERFLOW);(若分配失败)

         S.top = S.base;(top初始为base,空栈

         S.stacksize = MAXSIZE;

         return OK;

}

3.入栈

Status Push(SqStack  &S, SElemType  e)

{
        if(S.top - S.base  ==  S.stacksize)  return ERROR;(栈满)

        *S.top++  =  e; (e先入栈,栈顶指针S.top再加1)p59分析运算符的先后顺序

        return OK;

}

4.出栈

Status Pop(SqStack   &S, SElemType  &e)

{

     if(S.top  ==  S.base)   return ERROR;(栈空)

     e  =  *--S.top;(栈顶指针S.top先减1,再将栈顶元素赋给e出栈)p59分析运算符的先后顺序

     return OK;

}

5.取顺序栈的栈顶元素

SElemType  GetTop(SqStack  S)

{

       if (S.top  !=  S.base)  (栈非空)

             return   *(S.top  -  1);(返回栈顶元素的值,栈顶指针不变)
}

 

二、链栈的表示与实现

1.链栈的存储结构

typedef  struct  StackNode

{

       ElemType   data;(数据域)

       struct  StackNode  *next;(指针域)

} StackNode, *LinkStack;(结构体,指针变量)

2.初始化

Status  InitStack(LinkStack  &S)

       S = NULL;

       return  OK;

}

3.入栈

Status   Push(LinkStack   &S ,  SElemType   e)

{

       p = new  StackNode;(生成新结点,得到首地址值并赋给p)

       p->data  =  e;

      p->next   =  S;

      S = p;(修改栈顶指针为p)

      return OK;

}

4.出栈

Status  Pop(LinkStack  &S,SElemType  &e )

{

     if(S=NULL)     return  ERROR;(栈空)

     e = S->data;

     p = S;

     S = S->next;(指向新的栈顶元素)

     delete  p;

     return  OK;

}

5.取栈顶元素

SElemType   GetTop(LinkStack  S)

{

    if (S != NULL);

         return OK;

}

数据结构基础——栈(先进后出)

标签:define   修改   status   链栈   return   sel   失败   type   顺序   

原文地址:https://www.cnblogs.com/wdaotu/p/10618541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!