【Linux C编程】第二十六章 如何在 C 中实现队列?

举报
Yuchuan 发表于 2021/08/10 08:19:05 2021/08/10
【摘要】 队列是存储元素集合的线性数据结构。队列采用先进先出 (FIFO) 算法。本文将帮助您探索 C 中的队列

队列是存储元素集合的线性数据结构。队列采用先进先出 (FIFO) 算法。本文将帮助您探索 C 中的队列

本文将介绍以下指针,

那么让我们开始吧,

队列类比

您正在去看医生进行检查。诊所里有很多人。一位女士正在输入文件中所有人的姓名。先到的人先得到位置。当医生有空时,他把第一个病人叫进去。这是一个队列,遵循先进先出的方法,因为第一个在列表中输入他的名字的人首先得到处理。

从名单中删除以他们的名字对待的人。这就是队列的工作方式。

有2个指针,前面在队列的前面,后面在队列的后面。我们从队列的后面添加元素并从队列的前面删除它们。

继续这篇关于 Queue In C 的文章,

队列操作

  • 入队 - 如果队列中有空间,则在队列中添加一个元素。
  • Dequeue - 如果队列中有任何元素,则从队列中删除元素
  • Front- 从队列中获取第一项。
  • 重新获取队列中的最后一项。
  • isEmpty/isFull- 检查队列是空还是满。

应用

  • 队列用于在 CPU 中调度进程。
  • 它用于进程之间的数据传输。
  • 它拥有多个作业,然后在需要时调用。

继续这篇关于 Queue In C 的文章,

C 中队列的示例代码

#include <stdio.h>
#include<stdlib.h>
#define MAX 50
void insert();
void delete();
void display();
int queue_array[MAX];
int rear = - 1;
int front = - 1;
int main()
{
	int choice;
	while (1)
	{
		printf("1.Insert element to queue n");
		printf("2.Delete element from queue n");
		printf("3.Display all elements of queue n");
		printf("4.Quit n");
		printf("Enter your choice : ");
		scanf("%d", &choice);
		switch(choice)
		{
			case 1:
			insert();
			break;
			case 2:
			delete();
			break;
			case 3:
			display();
			break;
			case 4:
			exit(1);
			default:
			printf("Wrong choice n");
		}
	}
}
void insert()
{
	int item;
	if(rear == MAX - 1)
		printf("Queue Overflow n");
	else
	{
		if(front== - 1)
		front = 0;
		printf("Inset the element in queue : ");
		scanf("%d", &item);
		rear = rear + 1;
		queue_array[rear] = item;
	}
}
void delete()
{
	if(front == - 1 || front > rear)
	{
		printf("Queue Underflow n");
		return;
	}
	else
	{
		printf("Element deleted from queue is : %dn", queue_array[front]);
		front = front + 1;
	}
}
void display()
{
	int i;
	if(front == - 1)
		printf("Queue is empty n");
	else
	{
		printf("Queue is : n");
		for(i = front; i <= rear; i++)
		printf("%d ", queue_array[i]);
		printf("n");
	}
}

输出

C 中队列的示例代码

解释

这段代码是一个菜单驱动的队列实现。首先,定义 MAX 变量的大小为 50。然后,声明名为 queue_array 的数组的大小为 MAX。需要声明三个函数。这些功能是插入、显示和删除功能。使用菜单驱动的主要功能。要求用户输入他的选择并调用适当的函数来执行任务。

有2个指针,前面在队列的前面,后面在队列的后面。我们从队列的后面添加元素并从队列的前面删除它们。

继续这篇关于 Queue In C 的文章,

插入功能

void insert()
{
	int item;
	if(rear == MAX - 1)
	{
		printf("Queue Overflow n");
	}
	else
	{
		if(front == - 1)
		{
			front = 0;
			printf("Inset the element in queue : ");
			scanf("%d", &item);
			rear = rear + 1;
			queue_array[rear] = item;
		}
	}
}

在插入部分,首先声明一个要添加的项目。用户将输入该项目。检查队列是否已满,如果是则给出溢出消息,否则检查队列是否为空。然后后部增加一,并在位置后部添加新项目。

继续这篇关于 Queue In C 的文章,

删除功能

void insert()
{
	int item;
	if (rear == MAX - 1)
	{
		printf("Queue Overflow n");
	}
	else
	{
		if (front == - 1)
		{
			front = 0;
			printf("Inset the element in queue : ");
			scanf("%d", &item);
			rear = rear + 1;
			queue_array[rear] = item;
		}
	}
}

在删除部分,再次检查队列是否为空。如果是,则打印下溢错误。否则,打印第一个元素,即将被删除的元素并增加前面的元素。这就是删除发生的方式。

继续这篇关于 Queue In C 的文章,

显示功能

void display()
{
	int i;
	if(front == - 1)
	{
		printf("Queue is empty n");
	}
	else
	{
		printf("Queue is : n");
		for(i = front; i <= rear; i++)
		printf("%d ", queue_array[i]);
		printf("n");
	}
}

只需像数组一样显示队列。检查这里的队列是否也为空。队列的复杂度为 O(1),因为在任何操作中都不存在循环。

继续这篇关于 Queue In C 的文章,

实现的限制 

考虑一个大小为 5 的队列。我们输入了 5 个元素,但后来删除了前 2 个元素。现在有一个问题。我们有空闲空间,但是空间不会被使用,因为我们不能再次遍历。使用循环队列解决了这个问题。

这使我们到了这篇关于 C 中的队列的文章的结尾。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。