C语言 建立简单的顺序表队列

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define TYPE int

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

//创建
Queue* creat_queue(int len);
//销毁
void destory_queue(Queue* queue);
//队空
bool empty_queue(Queue* queue);
//队满
bool full_queue(Queue* queue);
//入队
bool push_queue(Queue* queue,TYPE data);
//出队
bool pop_queue(Queue* queue);
//查看队头
TYPE* head_queue(Queue* queue);
//查看队尾
TYPE* tall_queue(Queue* queue);


//----------------以上为函数声明----------------

int main()//main函数用于测试
{
	Queue* queue=creat_queue(10);
	printf("开始入队:\n------------\n");
	for(int i=0;i<10;i++)
	{
		printf("入队%s,",push_queue(queue,i)?"成功":"失败");
		printf("队尾:%d\n",*tall_queue(queue));
	}
	printf("开始出队:\n-------------\n");
	for(int i=0;i<5;i++)
	{
		printf("出队:%s,",pop_queue(queue)?"成功":"失败");
		printf("队尾:%d\n",*tall_queue(queue));
		
	}
	printf("开始入队:\n--------------\n");
	for(int i=0;i<10;i++)
	{
		printf("入队%s,",push_queue(queue,i)?"成功":"失败");
		printf("队尾:%d\n",*tall_queue(queue));
	}
}

//------------------以下为实现函数------------------
//创建
Queue* creat_queue(int len)
{
	Queue* queue = malloc(sizeof(Queue));
	queue->base = malloc(sizeof(TYPE)* len);
	queue->size = len;
	queue->head = 0;
	queue->tall = -1;
	queue->cnt = 0;
	return queue;
}
//销毁
void destory_queue(Queue* queue)
{
	free(queue->base);
	free(queue);
}
//队空
bool empty_queue(Queue* queue)
{

	return !queue->cnt;
}
//队满
bool full_queue(Queue* queue)
{
	return 	queue->cnt >= queue->size;	
}	
//入队
bool push_queue(Queue* queue,TYPE data)
{
	//顺序表队列 判断队满
	if(full_queue(queue)) return false;
	//回头
	queue->tall =(queue->tall+1) % queue->size;
	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->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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值