先进先出,就是"队列" 我们可以想象成,排队买票,先来的先买,后来的只能在末尾,不允许插队。
队列的两个基本操作:入队 将一个数据放到队列尾部;出队 从队列的头部取出一个元素。队列也是一种操作受限的线性表数据结构 它具有先进先出的特性,支持队尾插入元素,在队头删除元素。
队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。
代码(基于以前的线性表实现,线性表见https://blog.csdn.net/qq_33185566/article/details/103031593):
seqqueue.h文件:
#include "stdio.h"
#include "stdlib.h"
typedef void SeqQueue;
SeqQueue* SeqQueue_Create(int capacity);
void SeqQueue_Destroy(SeqQueue* queue);
void SeqQueue_Clear(SeqQueue* queue);
int SeqQueue_Append(SeqQueue* queue,void* item);
void* SeqQueue_Retrieve(SeqQueue* queue);
void* SeqQueue_Header(SeqQueue* queue);
int SeqQueue_Length(SeqQueue* queue);
int SeqQueue_Capacity(SeqQueue* queue);
seqqueue.c文件:
#include "seqqueue.h"
#include "seqlist.h"
//创建队列,相当于创建一个线性表
SeqQueue* SeqQueue_Create(int capacity)
{
return SeqList_Create(capacity);
}
//销毁队列,相当于销毁一个线性表
void SeqQueue_Destroy(SeqQueue* queue)
{
SeqList_Destroy(queue);
}
//清空队列,相当于清空线性表
void SeqQueue_Clear(SeqQueue* queue)
{
SeqList_Clear(queue);
}
//向队列中添加元素,相当于向线性表中添加元素
int SeqQueue_Append(SeqQueue* queue,void* item)
{
return SeqList_Insert(queue,item,SeqList_Length(queue));//尾插
}
//出队列,相当于删除线性表0号位置
void* SeqQueue_Retrieve(SeqQueue* queue)
{
return SeqList_Delete(queue,0);
}
//获取队列头
void* SeqQueue_Header(SeqQueue* queue)
{
return SeqList_Get(queue,0);
}
int SeqQueue_Length(SeqQueue* queue)
{
return SeqList_Length(queue);
}
int SeqQueue_Capacity(SeqQueue* queue)
{
return SeqList_Capacity(queue);
}
mian.c文件
#include "seqqueue.h"
int main()
{
int i = 0;
int a[10];
SeqQueue* queue = SeqQueue_Create(10);
if (queue == NULL)
{
return 0;
}
for (i = 0;i< 5; i++)
{
a[i] = i + 1;
SeqQueue_Append(queue,&a[i]);
}
printf("len:%d\n",SeqQueue_Length(queue));
printf("header:%d\n",*((int*)SeqQueue_Header(queue)));
printf("capacity:%d\n",SeqQueue_Capacity(queue));
while(SeqQueue_Length(queue) > 0)
{
int tem = *((int*)SeqQueue_Retrieve(queue));//出队列
printf("tem:%d ",tem);
}
printf("\n");
SeqQueue_Destroy(queue);
system("pause");
return 1;
}
输出结果: