循环队列的实现
程序员文章站
2022-07-14 14:01:40
...
Oqueue.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DATATYPE;
typedef struct Oqueue
{
DATATYPE* _arr;
int _front;
int _rear;
int _capicity;
}Oqueue;
void OqueueInit(Oqueue* q, int k);
int myCircularQueueEnQueue(Oqueue* q, int value);
void myCircularQueueDeQueue(Oqueue* q);
int myCircularQueueFront(Oqueue* q);
int myCircularQueueRear(Oqueue* q);
int myCircularQueueIsEmpty(Oqueue* q);
int myCircularQueueIsFull(Oqueue* q);
void myCircularQueuePrint(Oqueue* q);
Oqueue.c
#include"Oqueue.h"
void OqueueInit(Oqueue* q,int k)
{
assert(q);
q->_capicity = k;
q->_front = 0;
q->_rear = 0;
q->_arr = (DATATYPE*)malloc((q->_capicity+1)*sizeof(DATATYPE));
}
int myCircularQueueEnQueue(Oqueue* q, int value)
{
assert(q);
static int xrear = 0;
if (q->_capicity == 0)
{
return 0;
}
if (q->_rear == q->_capicity) //如果满了,就从头开始覆盖的插,但是尾部还在arr[4]
{ //如果让q->rear便成了0,那么接下来的打印将没法实现,如容量为5,插入1、2、3、4、5、6、7,会打印6、7,我们要打印出6、7、3、4、5
q->_arr[xrear % q->_capicity] = value;
xrear++;
}
else
q->_arr[q->_rear++] = value;
return 1;
}
void myCircularQueueDeQueue(Oqueue* q)
{
assert(q);
if (q->_rear == 0)
{
return;
}
q->_rear--;
}
int myCircularQueueFront(Oqueue* q)
{
assert(q);
if (q->_rear == 0)
{
return -1;
}
return q->_arr[q->_front];
}
int myCircularQueueRear(Oqueue* q)
{
assert(q);
if (q->_rear == 0)
{
return -1;
}
return q->_arr[q->_rear];
}
int myCircularQueueIsEmpty(Oqueue* q)
{
assert(q);
if (q->_rear == 0)
{
return 1;
}
else
{
return 0;
}
}
int myCircularQueueIsFull(Oqueue* q)
{
assert(q);
if (q->_rear == q->_capicity)
{
return 1;
}
else
{
return 0;
}
}
void myCircularQueuePrint(Oqueue* q)
{
assert(q);
int i = 0;
while (i != q->_rear)
{
printf("%d->",q->_arr[i]);
i++;
}
printf("\n");
}
test.c
#include"Oqueue.h"
int main()
{
Oqueue q;
OqueueInit(&q, 5);
myCircularQueueEnQueue(&q, 1);
myCircularQueueEnQueue(&q, 2);
myCircularQueueEnQueue(&q, 3);
myCircularQueueEnQueue(&q, 4);
myCircularQueueEnQueue(&q, 5);
myCircularQueueEnQueue(&q, 6);
myCircularQueueEnQueue(&q, 7);
myCircularQueueEnQueue(&q, 8);
myCircularQueueEnQueue(&q, 9);
myCircularQueueEnQueue(&q, 10);
myCircularQueueEnQueue(&q, 11);
myCircularQueueEnQueue(&q, 12);
myCircularQueueEnQueue(&q, 13);
myCircularQueueEnQueue(&q, 14);
myCircularQueuePrint(&q);
myCircularQueueDeQueue(&q);
myCircularQueuePrint(&q);
system("pause");
return 0;
}
上一篇: Flink - Sink