数据结构c语言循环队列的实现,数据结构——循环队列的基本操作(C语言实现)...

1、定义

#define QUEUE_DEFAULT_SIZE 8

typedef struct CycleSeqQueue

{

ElemType *base;

int capacity;

int front;

int rear;

}CycleSeqQueue;

2、判空、判满

bool IsFull(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

return ((pcq->rear + 1) % (pcq->capacity + 1)) == pcq->front;

}

bool IsEmpty(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

return pcq->front == pcq->rear;

}

3、初始化

void CycleSeqQueueInit(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

pcq->capacity = QUEUE_DEFAULT_SIZE;

pcq->base = (ElemType*)malloc(sizeof(ElemType)* (pcq->capacity + 1));

pcq->front = pcq->rear = 0;

}

4、入队、出队

void CycleSeqQueueEn(CycleSeqQueue *pcq, ElemType x)

{

assert(pcq != NULL);

if (IsFull(pcq))

{

printf("队列已满, %d 不能入队.\n", x);

return;

}

pcq->base[pcq->rear] = x;

pcq->rear = (pcq->rear + 1) % (pcq->capacity + 1);

}

void CycleSeqQueueDe(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

if (IsEmpty(pcq))

{

printf("队列以空, 不能出队.\n");

return;

}

pcq->front = (pcq->front + 1) % (pcq->capacity + 1);

}

5、取对头元素

ElemType CycleSeqQueueFront(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

assert(!IsEmpty(pcq));

return pcq->base[pcq->front];

}

6、求队列元素个数

int CycleSeqQueueSize(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

int size = 0;

for (int i = pcq->front; i != pcq->rear;)

{

size++;

i = (i + 1) % (pcq->capacity + 1);

}

return size;

}

7、打印

void CycleSeqQueueShow(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

for (int i = pcq->front; i != pcq->rear;)

{

printf("%d ", pcq->base[i]);

i = (i + 1) % (pcq->capacity + 1);

}

printf("\n");

}

8、摧毁

void CycleSeqQueueDestroy(CycleSeqQueue *pcq)

{

assert(pcq != NULL);

free(pcq->base);

pcq->base = NULL;

pcq->capacity = pcq->front = pcq->rear = 0;

}

测试用例和运行结果

a4fc7a18ad07b2af021721953a9d6baa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值