【数据结构】(C语言版)第三章:栈和队列

文章目录

  • 一、栈
    • 1.顺序栈
    • 2.共享栈
    • 3.链栈
    • 4.练习题
  • 二、队列
    • 1.顺序存储
    • 2.链式存储
    • 3.双端队列
    • 4.练习题
  • 三、栈和队列的应用
    • 1.栈在括号匹配时的应用
    • 2.栈在表达式求值中的应用
    • 3.栈在递归时的应用
    • 4.队列——树的层次遍历
    • 5.队列——图的层次遍历
    • 6.队列——操作系统应用
  • 四、特殊矩阵
    • 1.压缩存储
    • 2.稀疏矩阵

一、栈

概念:先进后出
不同的出栈序列的个数:(卡特兰数)
在这里插入图片描述
基操:

InitStack(&S);	//初始化空栈
StackEmpty(S);	//判空
Push(&S,x);		//进栈
Pop(&S,x);		//出栈
GetTop(S,&x);	//读栈顶元素
DestroyStack(&S);	//销毁栈

1.顺序栈

(1)定义:利用连续的存储空间

#define MaxSize 50;
typedef struct {
   
	ElemType data[MaxSize];	//存放栈中数据元素
	int top;	//存放栈顶指针
}SqStack;

栈顶指针:S.top,初始时设置S.top == -1;
栈顶元素:S.data[S.top]
进栈操作:栈不满时,栈顶指针先加1,再送值到栈顶元素。
出栈操作:栈不空时,先取栈顶元素值,再将栈顶指针减1。
栈空条件:S.top == -1
栈满条件:S.top == MaxSIze -1;
栈长:S.top+1

(2) 顺序栈的基本操作

1.初始化
void InitStack(SqStack &S){
   
	S.top = -1;
}

2.栈判空
bool StackEmpty(SqStack S){
   
	if(S.top == -1)
		return true;
	else
		return false;
}

3.进栈
bool Push(SqStack &S,ElemType x){
   
	if(S.top == MaxSize-1)
		return false;	//栈满
	S.data[++S.top] = x;
	return true;
}

4.出栈
bool Pop(SqStack &S,ElemType &x){
   
	if(S.top == -1)
		return false;
	x = S.data[S.top--];
	return true;
}

5.读取栈顶元素
bool GetTop(SqStack &S,ElemType &x){
   
	if(S.top == -1)
		return false;
	x = S.data[S.top];
	return true;
}

2.共享栈

(1)定义:让两个顺序栈共享一维数组,栈底分别设置在两端,栈顶向共享中间延伸。
【数据结构】(C语言版)第三章:栈和队列_第1张图片
判断栈满:(top1 - top0 )==1
进栈时,0号栈top0先加1再赋值,1号栈top1先减1再赋值。

#define maxsize 100
# define elemtp int

typedef struct{
   
	elemtp stack[maxsize];	//栈空间
	int top[2];	//两个栈顶指针

你可能感兴趣的:(#,数据结构)