循环(顺序)队列存储实现
# 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;
}
浙公网安备 33010602011771号