第三章 栈和队列
选择题
知识点
-
掌握栈和队列的特点,并能在相应的应用问题中正确选用
-
栈
堆栈是一种只允许在表的一端进行插入操作和删除操作的线性表。允许操作的一端称为栈顶,栈顶元素的位置由一个称为栈顶指针的变量给出。当表中没有元素时,称之为空栈。 -
队列
队列简称队 。是一种只允许在表的一端进行插入操作,而在表的另一端进行删除操作的线性表。允许插入的一端称为队尾,队尾元素的位置由rear指出; 允许删除的一端称为队头, 队头元素的位置由front指出。
-
-
熟练掌握栈的两种存储结构的基本操作实现算法,特别应注意栈满和栈空的条件
顺序存储结构
-
构造原理
描述堆栈的顺序存储结构最简单的方法是利用一维数组
STACK[ 0..M–1 ]
来表示,同时定义一个整型变量(不妨取名为top ) 给出栈顶元素的位置。 -
溢出
上溢 —— 当堆栈已满时做插入操作。( top = M – 1 )
下溢 —— 当堆栈为空时做删除操作。( top = –1 )
-
定义
#define M 100 SElemType STACK[M]; int top;
-
基本操作
初始化
void Init(int &top){ top = -1; }
判断是否为空
int Empty(int top){ return top == -1; }
判断是否栈满
int Full(int top){ return top == M-1; }
插入
int Push(SElemType STACK[],int top,SElemType item){ if(Full(top)){ return 0; } else{ STACK[++top] = item; return 1; } }
删除
int Pop(SElemType STACK[],int &top){ if(Empty(top)){ return 0; } else{ SElemType item = STACK[top--]; return 1; } }
多栈共享问题
STACK[0…M-1]
top[0]、 top[1] 分别为第1个与第2个栈的栈顶元素指针。插入
当i=1时,将item 插入第1个栈, 当i=2时, 将item 插入第2个栈。
int PUSH( SElemType STACK[],int top[],int i,SelemType item){ if(top[0]==top[1]–1){ return 0; } else{ if(i==1){ STACK[++top[0]]=item; } else{ STACK[– –top[1]]=item; } return 1; } }
删除
当i=1时,删除第1个栈的栈顶元素,当i=2时,删除第2个栈的栈顶元素。int POP(SElemType STACK[ ],int top[ ],int i, SElemType item ){ if(i==1){ if(top[0]==–1) return 0; else{ item=STACK[top[0
-