顺序队列
基本概念
- 队列是一种特殊的线性表
- 队列仅在线性表的两端进行操作
- 队头(Front):取出数据元素的一端(虽然用顺序表的头部和尾部效果一样,但这里我们使用顺序表的头部作为队列头部–从这里取出元素)
- 队尾(Rear):插入数据元素的一端(这里我们使用顺序表的尾部作为队列尾部部–从这里插入元素))
- 队列不允许在中间部位进行操作!
常用操作
- 销毁队列
- 清空队列
- 进队列
- 出队列
- 获取队头元素
- 获取队列的长度
代码实现
#ifndef __SEQQUEUE_H__
#define __SEQQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef void SeqQueue;
typedef void SeqQueueNode;
SeqQueue *SeqQueue_Create(int capacity);
void SeqQueue_Destroy(SeqQueue * queue);
void SeqQueue_Clear(SeqQueue * queue);
int SeqQueue_Append(SeqQueue * queue, SeqQueueNode *item);
SeqQueueNode *SeqQueue_Retrieve(SeqQueue * queue);
SeqQueueNode *SeqQueue_Header(SeqQueue * queue);
int SeqQueue_Length(SeqQueue * queue);
int SeqQueue_Capacity(SeqQueue * queue);
#endif
#include "seqqueue.h"
#include "seqlist.h"
SeqQueue *SeqQueue_Create(int capacity)
{
return SeqList_Create(capacity);
}
void SeqQueue_Destroy(SeqQueue * queue)
{
SeqList_Destroy((SeqList*)queue);
}
void SeqQueue_Clear(SeqQueue * queue)
{
SeqList_Clear((SeqList*)queue);
}
int SeqQueue_Append(SeqQueue * queue, SeqQueueNode *item)
{
return SeqList_Insert((SeqList*)queue, (SeqListNode*)item, SeqQueue_Length(queue));
}
SeqQueueNode *SeqQueue_Retrieve(SeqQueue * queue)
{
return SeqList_Delete((SeqList*)queue, 0);
}
SeqQueueNode *SeqQueue_Header(SeqQueue * queue)
{
return SeqList_Get((SeqList*)queue,0);
}
int SeqQueue_Length(SeqQueue * queue)
{
return SeqList_Length((SeqList*)queue);
}
int SeqQueue_Capacity(SeqQueue * queue)
{
return SeqList_Capacity((SeqList*)queue);
}
#include "seqqueue.h"
int main(void)
{
int i = 0;
int a[10] = {0};
SeqQueue *queue = NULL;
queue = SeqQueue_Create(10);
if (queue == NULL)
{
printf("create error!\n");
return -1;
}
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)
{
printf("var:%d\n", *(int *)SeqQueue_Retrieve(queue));
}
SeqQueue_Destroy(queue);
system("pause");
return 0;
}