文档详情

西安石油大学数据结构教案第03章.ppt

发布:2017-04-07约1.53万字共63页下载文档
文本预览下载声明
第3章 堆栈和队列 主要知识点 堆栈 堆栈应用 队列 队列应用 优先级队列 3.1 堆 栈 1、堆栈的基本概念 (1)定义:限定只能在固定一端进行插入和删除操作的线性表。特点:后进先出。 (2)允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。 作用:可以完成从输入数据序列到某些输出数据序列的转换 2、堆栈抽象数据类型 数据集合: {a0,a1,…,an-1}ai的数据类型为DataType。 操作集合: (1) StackInitiate(S) :初始化堆栈S (2) StackNotEmpty(S):堆栈S非空否 (3) StackPush(S, x) :入栈 (4) StackPop(S, d):出栈 (5) StackTop(S, d):取栈顶数据元素 3、顺序堆栈 顺序堆栈:顺序存储结构的堆栈。 顺序栈的存储结构: 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素. typedef struct { DataType stack[MaxStackSize]; int top; } SeqStack; 顺序堆栈的操作实现: (1)初始化StackInitiate(S) void StackInitiate(SeqStack *S) { S-top = 0; } (2)非空否StackNotEmpty(S) int StackNotEmpty(SeqStack S) { if(S.top = 0)return 0; else return 1; } (3)入栈StackPush(S, x) int StackPush(SeqStack *S, DataType x) { if(S-top = MaxStackSize) { printf(堆栈已满无法插入! \n); return 0; } else { S-stack[S-top] = x; S-top ++; return 1; } } (4)出栈StackPop(S, d) int StackPop(SeqStack *S, DataType *d) { if(S-top = 0) { printf(堆栈已空无数据元素出栈! \n); return 0; } else { S-top --;*d = S-stack[S-top]; return 1; } } (5)取栈顶数据元素StackTop(SeqStack S, DataType *d) int StackTop(SeqStack S, DataType *d) { if(S.top = 0) { printf(堆栈已空! \n); return 0; } else { *d = S.stack[S.top - 1]; return 1; } } 测试主程序: 任务:建立一个顺序堆栈,首先依次输入数据元素1, 2, 3,......,10,然后依次出栈堆栈中的数据元素并显示。 假设该顺序堆栈的数据元素个数在最坏情况下不会超过100个。 #include stdio.h #include stdlib.h #define MaxStackSize 100 typedef int DataType; #include SeqStack.h ? void main(void) { SeqStack myStack; int i , x; StackInitiate(myStack); for(i = 0
显示全部
相似文档