C语言循环队列的实现

queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_
#define QueueMax 10
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef int QUDataType;
typedef struct Queue 
{
	QUDataType _data[QueueMax];
	QUDataType* _front; // 队头    
	QUDataType* _rear;  // 队尾
	size_t size;
}Queue;
void QueueInit(Queue* pq); 
void QueueDestory(Queue* pq);
Queue* BuyQueueNode(QUDataType x); 
void QueuePush(Queue* pq, QUDataType x); 
void QueuePop(Queue* pq); 
QUDataType QueueFront(Queue* pq); 
QUDataType QueueBack(Queue* pq); 
int QueueEmpty(Queue* pq); 
int QueueSize(Queue* pq);
void TestQueue();

#endif /*_QUEUE_H_*/

queue.c

#include"Queue.h"

void QueueInit(Queue* pq)
{
	pq->_front = pq->_rear = pq->_data;
	pq->size = 0;
}
void QueueDestory(Queue* pq)
{
	pq->_front = pq->_rear = pq->_data;
	pq->size = 0;
}
void QueuePush(Queue* pq, QUDataType x)
{
	if (pq->size == QueueMax)
	{
		printf("栈已满\n");
		return;
	}
	if (pq->_rear - pq->_data == QueueMax - 1)
	{
		*pq->_rear = x;
		pq->_rear=pq->_data;
	}
	else
	{
		*pq->_rear = x;
		pq->_rear++;
	}
	pq->size++;
}
void QueuePop(Queue* pq)
{
	if (pq->size == 0)
	{
		printf("栈空\n");
		return;
	}
	if (pq->_front - pq->_data == QueueMax - 1)
	{
		printf("%d ", *pq->_front);
		pq->_front=pq->_data;
	}
	else
	{
		printf("%d ", *pq->_front);
		pq->_front++;
	}
	pq->size--;
}
QUDataType QueueFront(Queue* pq)
{
	if (pq->size!=0)
		return *pq->_front;
	return -1;
}
QUDataType QueueBack(Queue* pq)
{
	if (pq->size == 0)
		return 0;
	if (pq->_rear == pq->_data)
		return *(pq->_rear + QueueMax - 1);
	return *(pq->_rear-1);
}

main.c

#include"Queue.h"

int main()
{
	Queue pq;
	QueueInit(&pq);
	QueuePush(&pq, 1);
	QueuePush(&pq, 2);
	QueuePush(&pq, 3);
	QueuePush(&pq, 4);
	QueuePush(&pq, 5);
	QueuePush(&pq, 6);
	QueuePush(&pq, 7);
	QueuePush(&pq, 8);
	QueuePush(&pq, 9);
	QueuePush(&pq, 10);
	QueuePop(&pq);
	QueuePop(&pq);
	QueuePush(&pq, 11);
	QueuePush(&pq, 12);

	QueuePop(&pq);
	printf("%d ", QueueFront(&pq));
	QueuePop(&pq);
	printf("%d ", QueueFront(&pq));
	QueuePop(&pq);
	printf("%d ", QueueFront(&pq));
	QueuePop(&pq);
	printf("%d ", QueueFront(&pq));


	system("pause");
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值