队列(c语言实现)

目录

前言

一、队列是什么?

二、队列的属性与操作以及种类

1.队列属性

2.队列操作

3.队列种类

三、队列的实现(C语言)

总结



前言

举例:

          现实生活中,去电影院先来的应该先买票就是队列的核心思想。



一、队列是什么?

队列:FIFO(First Input First Output)

定义:

        队列是一种特殊的线性结构只允许在队列的首部进行删除操作(相当于排在最前面的先买票),这称为出队(即最先来的人买完票就应该走),而在队列的尾部进行插入(后来者排对在队尾)操作,这称为入队。


  


二、队列的属性与操作以及种类


1.队列属性

  • 队头(front):允许进行删除的一端称为队首。
  • 队尾(tail):允许进行插入的一端称为队首。
  • 大小(size):队列能够排的最大数量加一


2.队列操作

  • 入队
  • 出队
  • 获取队头元素
  • 判断队是否为空(队头与队尾相遇

3.队列种类

  • 单向队列:只能在一端删除数据,另一端插入数据。
  • 双向队列:两端都可以进行插入数据和删除数据操作。



三、队列的实现(C语言)

以下均是单向队列的实现

1.数组方法

#include<stdio.h>
int main()
{
	int q[100]={0,6,3,1,7,5,8,9,2,4},head,tail;
	head=1;
	tail=10;//初始化队列
	 
	while(head<tail)//队列不为空 
	{
		printf("%d ",q[head]);
		head++;
		
		q[tail]=q[head];
		tail++;
		head++;
	}
	getchar();
	return 0;
	
 } 

2.结构体方法

#include<stdio.h> 

struct queue{
	int data[100];//队列大小
	int head;//队首
	int tail;//队尾 
	
}; 

int main()
{
	
	struct queue q;
	q.head=1;
	q.tail=1;
	for(int i=1;i<10;i++)//向队列插入 9个数 
	{
		scanf("%d",&q.data[q.tail]);
		q.tail++;
		
	}
	while(q.head<q.tail)//队列不为空 
	{
		printf("%d ",q.data[q.head]);
		q.head++;
		
        q.data[q.tail]=q.data[q.head];
        q.tail++;
        q.head++;
	}
	getchar();
	return 0;
	
 } 

        可以对比,数组法与结构体法,其核心思想一样,只 是结构体将其所有定义封装成一个整体,在主函数main中就可以不用很麻烦的一直定义。

补充:其两种方法不同:

数组法在主函数中

    int q[100]={0,6,3,1,7,5,8,9,2,4},head,tail;
    head=1;
    tail=10;


结构体法在主函数中只需定义: struct queue q;

虽然在这里看不出有很大差别,但是当代码量很大很大,有很多模块时,如果每个模块中均需要定义则很麻烦,结构体则省去了这些冗余。


总结

  1. 队列先进先出
  2. 队列为空相当于队首等于队尾
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木子!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值