数据结构---队列(数组)

队列:是一种线性表,它只允许先进先出,后进后出。
即只能在队首删除元素,在队尾添加元素。

队列三个重要组成部分:
1.存放队列元素的空间
2.队列的队首
3.队列的队尾

队列的基本操作
1.初始化
2.是否为空
3.是否满了
4.添加元素
5.打印元素
6.删除元素法一(向前覆盖法)
7.删除元素二(向后位移法)

1.初始化

#define MAX_SIZE 10
typedef struct Queue {
    
    
	int queue[MAX_SIZE];
	int front;
	int rear;
}Queue;
int init(Queue* q) {
    
      //初始化队列
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	q->front = 0;
	q->rear = 0;
	return 1;
}

2.是否为空,即判断队首和队尾是否相同即可,相同即为空

int ISempty(Queue* q) {
    
      //判断是否为空
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (q->front == q->rear) {
    
    
		return 1;
	}
	else {
    
    
		return 0;
	}
}

3.是否满了:判断是否队尾等于最大存储数

int ISfull(Queue* q) {
    
     //判断是否满了
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (q->rear == MAX_SIZE) {
    
    
		return 1;
	}
	else {
    
    
		return 0;
	}
}

4.添加元素,在队尾处添加元素,队尾再向后一位

int EnterQueue(Queue* q, int date) {
    
     //插入元素
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISfull(q)) {
    
    
		cout << "队列已满 ,无法入队" << endl;
	}
	q->queue[q->rear] = date;
	q->rear++;
	return 1;
}

5.打印元素

int print(Queue* q) {
    
      //打印元素
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法打印" << endl;
	}
	for (int i = q->front;i < q->rear;i++) {
    
    
		cout << q->queue[i] << endl;
	}
	return 1;
}

6.删除元素法一(向前覆盖法)

int deQueue1(Queue* q, int& date) {
    
      //删除元素法1
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法删除" << endl;
		return 0;
	}
	date = q->queue[q->front];
	for (int i = q->front + 1;i < q->rear;i++) {
    
    
		q->queue[i - 1] = q->queue[i];
	}
	q->rear--;
	return 1;
}

7.删除元素二(向后位移法)

int deQueue2(Queue* q, int& date) {
    
    
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法删除" << endl;
		return 0;
	}
	date = q->front;
	q->front++;
	return 1;
}

全部代码:

#include<iostream>
#include<Windows.h>
using namespace std;
#define MAX_SIZE 10
typedef struct Queue {
    
    
	int queue[MAX_SIZE];
	int front;
	int rear;
}Queue;
int init(Queue* q);//初始化
int ISfull(Queue* q);//是否满了
int ISempty(Queue* q);//是否为空
int EnterQueue(Queue* q, int date); //队尾插入元素
int print(Queue* q);//打印元素
int deQueue1(Queue* q, int& date);//删除元素法1
int deQueue2(Queue* q, int& date);//删除元素法2
int main() {
    
    
	Queue* q = new Queue;
	int date=-1;
	init(q); 
	for (int i = 0;i < 5;i++) {
    
    
		EnterQueue(q, i);
	}
	print(q);
	deQueue1(q, date);
	cout << "头部元素:" << date << endl;
	cout << "队列里的元素:" << endl;
	print(q);
	deQueue2(q, date);
	cout << "头部元素:" << date << endl;
	cout << "队列里的元素:" << endl;
	print(q);
	system("pause");
	return 0;
}
int init(Queue* q) {
    
      //初始化队列
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	q->front = 0;
	q->rear = 0;
	return 1;
}
int ISfull(Queue* q) {
    
     //判断是否满了
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (q->rear == MAX_SIZE) {
    
    
		return 1;
	}
	else {
    
    
		return 0;
	}
}
int ISempty(Queue* q) {
    
      //判断是否为空
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (q->front == q->rear) {
    
    
		return 1;
	}
	else {
    
    
		return 0;
	}
}
int EnterQueue(Queue* q, int date) {
    
     //插入元素
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISfull(q)) {
    
    
		cout << "队列已满 ,无法入队" << endl;
	}
	q->queue[q->rear] = date;
	q->rear++;
	return 1;
}
int print(Queue* q) {
    
      //打印元素
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法打印" << endl;
	}
	for (int i = q->front;i < q->rear;i++) {
    
    
		cout << q->queue[i] << endl;
	}
	return 1;
}
int deQueue1(Queue* q, int& date) {
    
      //删除元素法1
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法删除" << endl;
		return 0;
	}
	date = q->queue[q->front];
	for (int i = q->front + 1;i < q->rear;i++) {
    
    
		q->queue[i - 1] = q->queue[i];
	}
	q->rear--;
	return 1;
}
int deQueue2(Queue* q, int& date) {
    
    
	if (!q) {
    
    
		cout << "初始化失败" << endl;
		return 0;
	}
	if (ISempty(q)) {
    
    
		cout << "队列为空,无法删除" << endl;
		return 0;
	}
	date = q->front;
	q->front++;
	return 1;
}

猜你喜欢

转载自blog.csdn.net/weixin_49324123/article/details/114277243