循环(顺序)队列存储实现


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

typedef struct Node
{
	int data;
	char ch;
}* PNODE, NODE;

typedef struct QUEUE
{
	int maxsize;
	int front;
	int rare;
	PNODE pBase;
}* PQUEUE, QUEUE;

//初始化
void init(PQUEUE pQ, int length)
{
	pQ->maxsize = length;

	pQ->pBase = (PNODE)malloc(sizeof(NODE) * length);

	pQ->front = pQ->rare = 0;

	while (!pQ->pBase)
	{
		printf("内存分配失败!\n");

		exit(-1);
	}


	return;
}

//入队
void enqueue(PQUEUE pQ, int val, char ch)
{
	if ((pQ->rare + 1) % (pQ->maxsize + 1) == pQ->front)
	{
		printf("队列满!%d, %c无法入队\n", val, ch);

		return;
	}
	else
	{
		pQ->pBase[pQ->rare % pQ->maxsize].data = val;
		pQ->pBase[pQ->rare % pQ->maxsize].ch = ch;

		printf("入队元素:%d, %c\n", val, ch);

		pQ->rare++;
	}

	return;
}

//遍历
void traverse(PQUEUE pQ)
{
	for (int i = pQ->front; i < pQ->rare; i++)
	{
		printf("%d, %c\n", pQ->pBase[i % pQ->maxsize].data, pQ->pBase[i % pQ->maxsize].ch);
	}

	return;
}

//出队
void dequeue(PQUEUE pQ)
{
	printf("出队元素:%d, %c\n", pQ->pBase[pQ->front], pQ->pBase[pQ->front]);
	pQ->front++;

	return;
}

int main(void)
{
	QUEUE q;

	init(&q, 10);
	enqueue(&q, 0, 'z');
	enqueue(&q, 1, 'y');
	enqueue(&q, 2, 'x');
	enqueue(&q, 3, 'w');
	enqueue(&q, 4, 'v');
	enqueue(&q, 5, 'u');
	enqueue(&q, 6, 't');
	enqueue(&q, 7, 's');
	enqueue(&q, 8, 'r');
	enqueue(&q, 9, 'q');
	enqueue(&q, 10, 'p');
	traverse(&q);
	dequeue(&q);
	traverse(&q);
	enqueue(&q, 11, 'n');
	traverse(&q);
	dequeue(&q);
	traverse(&q);
	enqueue(&q, 12, 'm');
	traverse(&q);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值