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


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



posted on 2017-07-06 16:18  ljbguanli  阅读(132)  评论(0编辑  收藏  举报