受限线性表---队列(TOPIC Six)

明日复明日,明日何其多,我生待明日,万事成蹉跎

一. 一些基本概念

(1)队列:首先提到队列最先想到的就是它是一种先进先出FIFO(后进后出LILO)的线性表,和上节所介绍的的概念有很大不同。队列规定只能在其中一端插入数据,而从另外一端取出数据。插入数据的那端称作队尾(rear),取出数据的一端称为队头(front)。下面定义一个队列的链式存储框架:

//定义链表队列节点
typedef struct LINKNODE{
	void* data;
	struct LINKNODE* next;
}LinkNode;
//定义链表队列
typedef struct LINKQUEUE{
	LinkNode front;		//队头指针
	LinkNode rear;		//队尾指针
	int queuesize;
}LinkQueue;

接着定义一个队列的顺序存储框架:

//定义顺序队列
typedef struct SEQQUEUE{
	void* data[Max];
	int queuesize;
}SeqQueue;

二. 代码实现

1. 队列的初始化

//初始化队列
SeqQueue* Init_SeqQueue(){
	SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
	for(int i = 0; i < Max; i++){
		queue -> data[i] = NULL;
	}
	queue -> queuesize = 0;
	return queue;
}

2. 入队

//入队
void Push_SeqQueue(SeqQueue* queue, void* data){
	//如果数据为空返回
	if (data == NULL){
		return;
	}
	//如果队列满则追加空间
	if (queue -> queuesize == Max){
		SeqQueue* queue = (SeqQueue*)realloc(SeqQueue* queue, (queue -> queuesize + INCREMENTSIZE) * sizeof(void*));
		for(int i = 0; i < Max + INCREMENTSIZE; i++){
			queue -> data[i] = NULL;
		}
		queue -> queuesize = queue -> (queuesize + INCREMENTSIZE);
	}
	queue -> data[queue -> queuesize] = data;
	queue -> queuesize++;
}

3. 出队

//出队
void Pop_SeqQueue(SeqQueue* queue){
	if (queue == NULL){
		return NULL;
	}
	if (queue -> queuesize == 0){
		return;
	}
	for(int i = 0; i < queue -> queuesize - 1; i++){
		queue -> data[i] = queue -> data[i + 1];
	}
	queue -> queuesize--;
}

4. 常用函数

#include <queue> 	//引入的头文件
queue<int> qu;

qu.empty() 队列为空则返回真

qu.pop() 移除队列()第一个元素

qu.front() 返回队列()第一个元素

qu.push() 在队列()增加元素

qu.size() 返回队列中元素数目

qu.back() 返回最后一个元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值