图解队列的顺序存储

 

 

#ifndef _KN_SEQQUEUE_H_
#define _KN_SEQQUEUE_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_Rertieve(SeqQueue *queue);

//获取队头元素
void* SeqQueue_Header(SeqQueue *queue);

//获取队列的长度
int SeqQueue_Length(SeqQueue *queue);

//获取队列的容量
int SeqQueue_Capacity(SeqQueue *queue);

#endif //_KN_SEQQUEUE_H_


/*
	队列:是一种特殊的线性表,只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
	队头:允许删除数据元素的一端
	队尾:允许插入数据元素的一端
	队列不允许在中间部位进行操作
	队列是一种先进先出(First In First Out, 简称FIFO)的线性表
*/
#include <stdio.h>
#include "knSeqlist.h"
#include "knSeqqueue.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_Rertieve(SeqQueue *queue)
{
	return SeqList_Detete(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);
}

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "knSeqqueue.h"

void test()
{
	int i, a[10];
	SeqQueue *queue = NULL;
	queue = SeqQueue_Create(10);

	for (i = 0; i < 5; i++){
		a[i] = i + 1;
		printf("向队尾插入元素:%d\n", a[i]);
		SeqQueue_Append(queue, &a[i]);
	}
	printf("the header of queue: %d\n", *((int*)SeqQueue_Header(queue)));
	printf("the length of queue: %d\n", SeqQueue_Length(queue));
	printf("the capacity of queue: %d\n", SeqQueue_Capacity(queue));
	
	//出队列 是删除元素!!
	while (SeqQueue_Length(queue) > 0){
		printf("从队头删除元素:%d\n", *((int *)SeqQueue_Rertieve(queue)));
	}
	SeqQueue_Destroy(queue);
}


int main()
{
	test();
	printf("\n");
	system("pause");
	return 0;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值