数据结构——栈
2016-06-01 00:00
375 查看
摘要: 栈
一、概念
栈:栈是一个先进后出的线性表,它要求只在表尾进行删除和插入等操作。所以栈其实就是一个线性表,不过操作有特殊的要求和限制(1)元素必须先进后出;(2)操作只能在线性表尾进行
栈的基本操作只有2个,入栈(Push)和出栈(Pop)
栈的结构示意图(网上找的)
二、栈的实现
下面介绍如何使用顺序表实现一个简单的栈
(1)定义栈的结构
(2)初始化栈
(3)释放栈
(4)判断栈的状态
(5)入栈
(6)出栈
(7)获取栈顶元素
打完手工,可能有不完善或者bug,只能等以后发现了再修改了
一、概念
栈:栈是一个先进后出的线性表,它要求只在表尾进行删除和插入等操作。所以栈其实就是一个线性表,不过操作有特殊的要求和限制(1)元素必须先进后出;(2)操作只能在线性表尾进行
栈的基本操作只有2个,入栈(Push)和出栈(Pop)
栈的结构示意图(网上找的)
二、栈的实现
下面介绍如何使用顺序表实现一个简单的栈
(1)定义栈的结构
typedef struct { DATA data[SIZE+1]; //栈的数据元素,SIZE表示栈大小,数据从下标1开始保存 int top; //栈顶,top=0时表示栈为空 }SeqStack;
(2)初始化栈
SeqStack *SeqStackinit() { SeqStack *p; if (p=(SeqStack *)malloc(sizeof(SeqStack))) { p->top = 0; return p; } return NULL; }
(3)释放栈
void SeqStackFree(SeqStack *s) { if (s) free(s); }
(4)判断栈的状态
int SeqStackIsEmpty(SeqStack *s) { return (s->top == 0); } void SeqStackClear(SeqStack *s) { s->top = 0; } int SeqStackIsFull(SeqStack *s) { return (s->top == SIZE); }
(5)入栈
int SeqStackPush(SeqStack *s, DATA data) { if ((s->top + 1) > SIZE) { printf("栈溢出\n"); return 0; } s->data[++s->top] = data; return 1; }
(6)出栈
DATA SeqStackPop(SeqStack *s) { if (s->top == 0) { printf("栈为空\n"); exit(0); } return (s->data[s->top--]); }
(7)获取栈顶元素
DATA SeqStackPeek(SeqStack *s) { if (s->top == 0) { printf("栈为空\n"); exit(0); } return (s->data[s->top]); }
打完手工,可能有不完善或者bug,只能等以后发现了再修改了
相关文章推荐
- C++基于栈实现铁轨问题
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- JavaScript数组的栈方法与队列方法详解
- JavaScript数据结构与算法之栈与队列
- JavaScipt中栈的实现方法
- Java中堆和栈的区别详解
- 详解Java的堆内存与栈内存的存储机制
- java中堆和栈的区别分析