(八)队列的顺序存储设计与实现

队列的顺序存储设计与实现

1、概念

   队列是一种特殊的线性表;队列仅在线性表的两端进行操作;对头(Front)是取出元素的一端;队尾(Rear)是插入数据元素的一端;队列不允许在中间部位进行操作。

   队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。


2、队列模型与链表模型的分析


3、代码实现

(1)seqqueue.h

#ifndef _MY_SEQQUEUE_H_
#define _MY_SEQQUEUE_H_

typedef void SeqQueue;

SeqQueue* SeqQueue_Create(int capacity);

void SeqQueue_Destory(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);

#endif


(2)seqqueue.c(seqlist.h链接

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "seqqueue.h"
#include "seqlist.h"

//队列是一种特殊的线性表
//创建一个队列 相当于创建一个顺序存储的线性表
SeqQueue* SeqQueue_Create(int capacity)
{
	return SeqList_Create(capacity);
}

//销毁队列 相当于 销毁顺序存储的线性表
void SeqQueue_Destory(SeqQueue* queue)
{
	SeqList_Destory(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);
}

//获取队列头部 相当于 获取线性表的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);
}

(3)具体实现

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "seqqueue.h"

void maindm008()
{
	int ret = 0;
	int a[10];
	//创建队列
	SeqQueue* queue = NULL;
	queue = SeqQueue_Create(10);
	if (queue == NULL)
	{
		ret = -1;
		printf("func SeqQueue_Create() err:%d\n", ret);
		return ;
	}

	//插入元素
	for (int i = 0; i < 5; i++)
	{
		a[i] = i + 1;
		SeqQueue_Append(queue, &a[i]);
	}

	//打印队列的属性
	printf("The Queue's Header:%d\n", *((int*)SeqQueue_Header(queue)));//队头元素
	printf("The Queue's Length:%d\n", SeqQueue_Length(queue));//队列的长度
	printf("The Queue's Capacity:%d\n", SeqQueue_Capacity(queue));//队列的容量

	//删除元素
	while (SeqQueue_Length(queue) > 0)
	{
		int tmp = *((int*)SeqQueue_Retrieve(queue));
		printf("tmp:%d ", tmp);
	}
	printf("\n");

	//销毁队列
	SeqQueue_Destory(queue);

	system("pause");
	return;
}


猜你喜欢

转载自blog.csdn.net/ailunlee/article/details/79925570