数据结构学习之特殊线性表 队列

本文详细探讨了数据结构中的特殊线性表——队列,讲解了其基本概念、工作原理以及在计算机科学中的应用。通过实例解析,阐述了队列的FIFO(先进先出)特性,并介绍了如何在实际编程中使用队列,包括队列的插入(入队)和删除(出队)操作。同时,讨论了队列在任务调度、缓冲区管理、打印机队列等场景中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序基本定义
typedef 100 maxsize;
typedef int elemtype;
elemtype item[maxsize];
int front;
int rear;
结构定义
#define maxsize 100;
typedef int elemtype;
struct qnode{
	elemtype num[maxsize];
	int front ,rear;
};
struct qnode queue;
链式结构
struct qhead
{
	struct qnode *front;
	struct qnode *rear;
};
struct qnode ;
{
	struct qnode *next;
	elemtype data;
};
一、队列的顺序初始化
initq (struct qnode queue)
{
	queue.front=0;
	queue.rear=0;
}
2.置空队列
clear(struct qnode queue)
{
	queue.front=0;
	queue.rear=0;
}
3.判断队列是否为空
int emptyq(struct qnode queue)
{
	if(queue.front==queue.rear)
		return (1);
	else
		return (0);
}
4.队列满运算
int fullq(struct qnode queue)
{
	return (queue.rear==maxsize);
}
5.求队列长度
int lengthq(struct qnode queue)
{
	return(queue.rear-queue.front);
}
6.数据元素入队
void insertq(struct qnode queue,elemtype k)
{
	if(fullq(queue)))
		printf("overflow");
	else 
		queue.num[queue.rear]=k;
		queue.rear++;
}
7.数据元素出队
elemtype deleteq(struct qnode queue)
{
	int k;
	if(emptyq(queue))
	{
		printf("underfolw");
		return(0);
	}
	else 
	{
		k=queue.num[queue.front]
		queue.front ++;
		return (k);
	}
}
二、队列的链式存储
1.初始化链队
struct qhead *initq(struct qhead *p)
{
	p->front =NULL;
	p->rear=NULL;
}
2.置空链表
同初始化一样
3.判断链表为空
int emptyq(struct qhead *p)
{
	return(p->front==NULL);
}
4.元素k入队
在链队尾插入一个数据域为k的结点
struct qhead *insertq(struct qhead *p,elemtype k)
{
	struct qnode *q,q;
	q=(struct qnode *) malloc(sizeof(struct qnode));
	q.data=k;
	q.next=NULL;
	if(emptyq(p))
	{
		p->front=q;
		p->rear=q;
	}
	else
	{q0=p->rear;
		q0->next=q;
	p->rear=q;}
}
5.数据元素出链队
elemtype deletq(struct qnode *p)
{
	struct qnode *q;
	if (emptyq(p))
		printf("underflow\n")
	;else{
		q=p->front;
		p->front =q->next;
		free(q);
	}
}
循环队列

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值