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;
}