线性结构-队列

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性结构-队列相关的知识,希望对你有一定的参考价值。

二 队列

一.什么是队列


队列:两端"开口", 尾进头出_先进先出( 以图片为准则 理解图片以及记忆原理方法而非概念 )

队头和队尾

队头: 队列中出队列的一端

队尾: 队列中进队列的一端

队列的实现方法
  1. 顺序表_顺序队列
  2. 链表_链式队列
队列的应用

排队问题…

二.顺序队列

#include<stdio.h>

// 入队
// 参数: 存储结构,队尾,数据
// 返回值: 队尾
int enQueue(int* a, int rear, int data) 
	// rear: 即将添加数据的位置
	a[rear] = data;
	printf("元素%d以入队\\n", a[rear]);
	rear++;
	return rear;

// 出队
// 参数: 存储结构,队尾,队头
// 返回值: 队头指针
int deQueue(int* a, int rear, int front) 
	// 判断
	if (rear == front) 
		printf("删除失败,队列为空\\n");
	
	else 
		printf("元素%d已出队\\n",a[front]);
		front++;
	
	return front;


int main()

	// 数组(队列)
	int a[100];
	// 队头和队尾
	int rear, front;
	// 当队列中没有元素的时候.队头和队尾是同一个地方
	rear = front = 0;
	// 入队
	for (size_t i = 0; i < 5; i++)
	
		rear = enQueue(a, rear, i);          // 队列中按顺序存入12345
	
	// 出队
	while (rear != front) 
		front = deQueue(a, rear, front);
	
	front = deQueue(a, rear, front);

 

问题1: 头和尾不断递增, 而数组有限制

问题2: 如果不断存储,不出队列,数组需要扩容

个位可以想一想啊, 往后一起我写出我的解决方案, 但是想看看大佬们的操作

三.链式队列

#include<stdio.h>
#include<stdlib.h>

// 节点
typedef struct QNode 
	int data;
	struct QNode* next;
QNode;

// 创建队列(头节点)
QNode* initQueue() 
	// 创建头节点
	QNode* queue = (QNode*)malloc(sizeof(QNode));
	// 赋值(头节点不存储数据,或初始化任意值)
	queue->next = NULL;
	return queue;


// 入队
QNode* enQueue(QNode* rear, int data)

	// 1 做一个新的节点
	QNode* NewNode = (QNode*)malloc(sizeof(QNode));
	NewNode->data = data;
	NewNode->next = NULL;

	// 2 使用尾插法添加
	rear->next = NewNode;
	rear = NewNode;

	return rear;


// 出队
QNode* deQueue(QNode* front, QNode* rear) 
	if (front->next == NULL)
	
		printf("队列为空!\\n");
		return rear;
	
	// 创建临时指针
	QNode* pList = front->next;
	// 显示数据
	printf("%d  ",pList->data);
	// 断头, 换头
	front->next = pList->next;
	// 判断
	if (rear == pList)
	
		rear = front;
	
	// 释放
	free(pList);
	return rear;

int main() 
	QNode* queue, * front, * rear;
	queue = front = rear = initQueue();

	// 入队
	for (size_t i = 1; i <= 5; i++)
	
		rear = enQueue(rear, i);
	

	// 出队
	rear = deQueue(front, rear);
	rear = deQueue(front, rear);
	rear = deQueue(front, rear);
	rear = deQueue(front, rear);
	rear = deQueue(front, rear);
	rear = deQueue(front, rear);
	return 0;


以上是关于线性结构-队列的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—— 线性结构:队列

线性结构-队列

线性结构的常见应用之一 队列

数据结构::线性队列

线性数据结构---队列,栈 随笔

线性表 链队列