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

数据结构 - 栈

时间:2015-05-11 09:09:29      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:   入栈   出栈   定义   

栈的概述

什么是栈呢?

限定仅在表尾进行插入或删除操作的线性表。对栈来说,表尾又称栈顶(top),表头又称为栈底(bottom)。不含元素的空表称为空栈。
如:栈S=(a1,a2,…,an),其中a1为栈底元素,an 为栈顶元素

栈有什么特点呢?

栈是一种线性结构
对栈的操作按照“后进先出”的原则进行

读栈顶元素

非空栈中,读取栈顶元素,不影响栈中元素之间的关系
技术分享

入栈

向栈中插入一个新的元素,新插入的元素为新的栈顶元素
技术分享

出栈

非空栈中,删除栈顶元素,其直接前驱为新的栈顶元素
技术分享

栈的存储与实现

  • 顺序栈
    用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,栈顶指针为指向表尾的指针

  • 链栈
    利用链表存储栈中栈底到栈顶的数据元素,栈顶指针为链表头指针

顺序栈算法

#define STACK_INIT_SIZE  100
  #define  STACKINCREMENT 10 
  typedef struct {
  SElemType  *base;    
  SElemType  *top;  
  int   stacksize;    
  } SqStack;

顺序栈的基本形态

技术分享 技术分享

在顺序栈中,栈底指针始终指向栈底位置,而在非空栈中,栈顶指针始终指向栈顶元素的下一个位置

初始化(空栈)

S.base=(SElemType*)malloc(STACK_INIT_SIZE*
sizeof(SElemType));
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;

顺序栈的入栈算法

if (S.top - S.base >= S.stacksize) {//栈满,追加存储空间
    S.base = (SElemType *) realloc ( S.base,
    (S.stacksize + STACKINCREMENT) *sizeof (SElemType));
                                                       sizeof (SElemType));
    S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
}
*S.top = e;
 S.top = S.top+1;

顺序栈的入栈算法

if (S.top != S.base) {
    S.top = S.top-1;
   *S.top = e;

}

链栈(栈的链式存储结构)

链栈的算法

typedef struct SNode{
     SElemType data;     //数据域
     structLNode *next;  //指针域
}SNode, *LinkStack;

技术分享

  • 链栈的基本操作实现:

链栈中进行入栈、出栈和取栈顶元素等基本操作时,相当于链表在头指针处进行相应操作

入栈:插入在链表中的第一个位置,头指针指向新插入的元素

出栈:删除链表的第一元素,头指针指向其后继

取栈顶:读取链表中第一个元素,头指针不变

数据结构 - 栈

标签:   入栈   出栈   定义   

原文地址:http://blog.csdn.net/gxseveryday/article/details/45622621

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