数据结构 - 栈
来源:互联网 发布:炉石传说卡牌数据库 编辑:程序博客网 时间:2024/06/05 01:51
栈的概述
什么是栈呢?
限定仅在表尾进行插入或删除操作的线性表。对栈来说,表尾又称栈顶(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;
- 链栈的基本操作实现:
链栈中进行入栈、出栈和取栈顶元素等基本操作时,相当于链表在头指针处进行相应操作
入栈:插入在链表中的第一个位置,头指针指向新插入的元素
出栈:删除链表的第一元素,头指针指向其后继
取栈顶:读取链表中第一个元素,头指针不变
0 0
- 数据结构---栈
- 数据结构-栈
- 数据结构 栈
- 数据结构--栈
- 数据结构 栈
- 数据结构(栈)
- 数据结构栈
- 数据结构-栈
- 数据结构-----栈
- 数据结构-栈
- 【数据结构】栈
- 数据结构---->栈
- 数据结构---栈
- 数据结构--栈
- 数据结构----栈
- 数据结构--栈
- 【数据结构】 栈
- 数据结构 -- 栈
- charaster---string单个字符操作
- em与strong的三大区别
- 【转载】HTML 元素的显示类型
- 关于浮动元素的经典考题
- 【转载】IE6中Li列表项之间增加空行BUG
- 数据结构 - 栈
- IE hack小结
- IE6下浮动元素边距加倍问题分析
- IE6中绝对定位元素消失问题
- 【转载】IE hasLayout的问题总结
- Linux网络基础配置
- IE6中a:hover选择子元素失效
- IE6中z-index失效
- linux应用开发-I/O操作