第3章 栈(new).pptVIP

  • 9
  • 0
  • 约1万字
  • 约 38页
  • 2018-07-24 发布于河南
  • 举报
第3章 栈(new)

实用数据结构基础 第3章 栈 第 3 章 栈 知 识 点 栈的定义和特点 栈的典型应用 难 点 后缀表达式的算法 数制的换算 要 求 掌握栈的特点 熟悉栈的各种实际应用 3-1 栈的定义和运算 3-1-1 栈(Stack)的定义 1. 栈的定义 ??? 栈是限制在表尾进行插入和删除的线性表。 2. 栈的特性 (1)栈的主要特点是“后进先出” (2)允许插入、删除的这一端称为栈顶(Top),另一端称为栈底(Bottom)。 3. 应用实例 (1)分币筒; (2)铁路调度站。 3-1-2 栈的运算 1.进栈: Push(s,x) 初始条件:栈s已存在且非满。 操作结果:在栈顶插入一个元素x,栈中多了一个元素。 2.出栈:Pop(s) 初始条件:栈s存在且非空。 操作结果:删除栈顶元素,栈中少了一个元素。 3.读栈顶元素:ReadTop(s,e) 初始条件:栈s已存在且非空。 操作结果:输出栈顶元素,但栈中元素不变。 4. 判栈空:SEmpty(s) 初始条件:栈s已存在。 操作结果:若栈空则返回为0,否则返回为1。 5. 判栈满:SFull(s) 初始条件:栈s已存在。 操作结果:若栈满则返回为0,否则返回为1。 6. 显示栈元素:ShowStack (s) 初始条件:栈s已存在?,且非空。 操作结果:显示栈中所有元素。 3-2 栈的存储和实现 3-2-1 顺序栈 1. 顺序栈的实现 (1) 用一维数组实现顺序栈 设栈中的数据元素的类型是字符型,用一个足够长度的一维数组s来存放元素,数组的最大容量为MAXLEN,栈顶指针为top,则顺序栈可以用C(或C++)语言描述如下: #define MAXLEN 10 // 分配最大的栈空间 char s[MAXLEN]; // 数据类型为字符型 int top; // 定义栈顶指针 (2) 用结构体数组实现顺序栈 顺序栈的结构体描述: #define MAXLEN 10 // 分配最大的栈空间 typedef struct // 定义结构体 { datatype data[MAXLEN]; // datatype可根据用需要定义类型 int top; // 定义栈顶指针 } SeqStack; 再定义一个指向顺序栈的指针: SeqStack *S; // 定义S为结构体类型的指针变量 (3)栈操作的示意图如图3-3所示。 当top = -1时,表示栈空,如图3-3(a); 当top=0时,表示栈中有一个元素,如图3-3(b)表示栈中已输入一个元素A; 入栈时,栈顶指针上移,指针top加1,如图3-3(c)是6个元素入栈后的状况; 出栈时,栈顶指针下移,指针top减1, 如图3-3(d)是在F、E相继出栈后的情况。此时栈中还有A、B、C、D 4个元素,top=3,指针已经指向了新的栈顶。但是出栈的元素F、E仍然在原先的存储单元,只是不在栈中了,因为栈是只能在栈顶进行操作的线性表。 当top=9时,即top=MAXLEN–1,表示栈满,如图3-3(e)。 2.顺序栈运算的基本算法 (1)置空栈 首先建立栈空间,然后初始化栈顶指针。 SeqStack *Snull() { SeqStack *s; s=new (SeqStack); // 在C语言中用s=malloc(sizeof(SeqStack)); s-top= –1; // 置栈空 return s; } (2) 进栈 进栈运算是在栈顶位置插入一个新元素x,其算法步骤为: (a)??? 判栈是否为满,若栈满,作溢出处理,并返回0; (b)??? 若栈未满,栈顶指针top加1; (c)??? 将新元素x送入栈顶,并返回1。 int Push (SeqStack *s, datatype x) { if (s-top= =MAXLEN–1) return 0;

文档评论(0)

1亿VIP精品文档

相关文档