数据结构考研03-栈和队列

数据结构考研03-栈和队列_第1张图片

基本概念

只允许在一端进行插入或者删除操作的线性表

栈的顺序存储结构

数据结构考研03-栈和队列_第2张图片数据结构考研03-栈和队列_第3张图片

#include
#include

/*
栈的顺序存储结构:通过数组实现
*/

#define Max 100

typedef struct{
	int data[Max];
	int top;//指向栈顶
}SqStack;

void Init(SqStack *s){
	s->top = -1;//初始化顺序栈令栈顶指向-1,也是栈空的条件
}

//判断栈空
void StackEmpty(SqStack s){
	if(s.top == -1)
		printf("栈为空\n");
	else
		printf("栈内有元素\n");
}

//进栈
void Push(SqStack *s,int num){
	if(s->top+1==Max)
		printf("栈已满,不能入栈");
	else
		s->top+=1;
		s->data[s->top] = num;
}

//出栈
void Pop(SqStack *s){
	if(s->top == -1)
		printf("栈空,不能出栈");
	else
		s->top-=1;
}

int GetTop(SqStack *s){
	if(s->top == -1)
		printf("栈空");
	else
		return s->data[s->top];
}

int main(){
	int num;
	SqStack s;
	Init(&s);
	Push(&s,1);
	StackEmpty(s);
	num = GetTop(&s);
	printf("%d\n",num);
	Pop(&s);
	Pop(&s);
}

共享栈

数据结构考研03-栈和队列_第4张图片

栈的链式存储

和线性表的链式存储一个原理,只需要约束条件

栈在递归中的应用

数据结构考研03-栈和队列_第5张图片数据结构考研03-栈和队列_第6张图片数据结构考研03-栈和队列_第7张图片

队列

定义

数据结构考研03-栈和队列_第8张图片
数据结构考研03-栈和队列_第9张图片

队列顺序实现

#include
#include

/*
队列顺序实现:用静态数组方式实现
*/

#define Max 10

typedef struct{
	int data[Max];
	int front,rear;//队头队尾指针
}SqQueue;

void Init(SqQueue *L){
	L->front=0;
	L->rear=0;//初始化都为0
}

void In(SqQueue *L,int data){
	if(L->rear==Max)
		printf("队列已满\n");
	else{
		L->data[L->rear] = data;
		L->rear+=1;
	}
}

循环队列

数据结构考研03-栈和队列_第10张图片数据结构考研03-栈和队列_第11张图片数据结构考研03-栈和队列_第12张图片

双端队列

数据结构考研03-栈和队列_第13张图片

队列应用

数据结构考研03-栈和队列_第14张图片

  • 每次处理的是队头元素,同时把左右孩子放到队尾
    数据结构考研03-栈和队列_第15张图片
    数据结构考研03-栈和队列_第16张图片数据结构考研03-栈和队列_第17张图片

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