肥猫学习笔记--C语言数据结构与算法(二)----队列

C语言数据结构与算法(二)

什么是队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列的特性

队列,顾名思义,就像排队买东西一样,排在前面买东西的买完走人,排在后面的要排着队等到买完东西再走人,也就是先进先出,后进后出的顺序

创建队列

要想创建一个栈,我们首先需要一个结构体,其中有
1、元素
2、对头
3、队尾
4、数量
5、容量

#define TYPE int
typedef struct Queue
{
	TYPE* base;
	int size;	//容量
	int head;	//队头
	int tall;	//队尾
	int cnt;	//数量
}Queue;

然后是创建队列的函数

Queue* create_queue(int len)//创建
{
	Queue* queue=malloc(sizeof(Queue));
	queue->base = malooc(sizeof(TYPE)*len);
	queue->len = len;
	queue->head = 0;
	queue->tall = -1;
	queue->cnt = 0;//元素的数量
	return queue;
	}

对队列进行操作

判断队列满

队满的条件是队列里面的元素大于或等于队列的长度

bool full_queue(Queue* queue)//队满
{
	if(queue->len <= queue->cnt)
		return true;
		return false;
	}

判断队列空

判断队列是否为空就用cnt来进行判断

bool empty_queue(Queue* queue)//队空
{
	if(0 == queue->cnt)
	{
		return true;
		}
		return false;
	}

入队

对于队列来说,当入队入满,出队完之后,队头和队尾所指向的是队列的最后一个元素,怎么让它回头,回到最开始的地方是一个难点,在这里我用的是使用除余的方法

bool push_queue(Queue* queue, TYPE data)
{
	//1.判断是否队满
	//2.回头:指针指完最后一个又回到第一个
	if(full_queue(queue)) return false;
	queue->tall = (queue->tall+1) % queue->size;//%多少就是0-多少的数字,定义tall的初始值为-1,所以要+1
	queue->base[queue->tall]=data;
	queue->cnt++;
	return true;
}

出队

与入队同理

bool pop_queue(Queue* queue)
{
	if(empty_queue(queue)) return false;
	queue->head = (queue->head+1) % queue->size;
	queue->base[queue->heal]=data;
	queue->cnt--;
	return true;
	}

队头元素

比较简单,不再细说

TYPE* head_queue(Queue* queue)
{
	if(empty_queue(queue)) return NULL;
	return queue->base+queue->head;
	}

队尾元素

TYPE*tall_queue(Queue* queue)
{
	if(empty_queue(queue)) return NULL;
	return queue->base+queue->tall;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章