/*
该实现front始终指向当前的头结点,rear始终指向尾结点的
下一个结点
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 10
#define datatype int
typedef struct queue{
int queue[MAXNUM];
int front;
int rear;
}queue;
void initqueue(queue** p)
{
*p = (queue* )malloc(sizeof(queue));
if(*p != NULL){
(*p)->front = 0;
(*p)->rear = 0;
}
}
int emptyqueue(queue** p)
{
int val;
val = ((*p)->front == (*p)->rear);
return val;
}
void enqueue(queue** p, datatype x)//将x插入队尾
{
if(((*p)->rear+1)%MAXNUM == (*p)->front){
printf("the queue is full/n");
return;
}
(*p)->queue[(*p)->rear] = x;
(*p)->rear = ((*p)->rear+1)%MAXNUM;
}
void delqueue(queue** p, datatype* x)//删除队列头元素,用x返回
{
if((*p)->front == (*p)->rear){
printf("the queue is empty/n");
return;
}
*x = (*p)->queue[(*p)->front];
(*p)->front = ((*p)->front+1)%MAXNUM;
}
void firstqueue(queue** p, datatype* x)//返回队列头元素
{
*x = (*p)->queue[(*p)->front];
}
void prqueue(queue** p)//打印队列元素
{
int i;
i = (*p)->front;
while(i != (*p)->rear){
printf("%c", (*p)->queue[i]);
i = (i + 1) % MAXNUM;
}
printf("/n");
}
int main(int argc, char** argv)
{
queue* p;
int c, i;
initqueue(&p);
printf("input queue node value:/n");
/***
while((c = getchar()) !='/n'){
enqueue(&p, c);
}
***/
prqueue(&p);
for(i = 0; i < 3; i++){
delqueue(&p, &c);//删除一个头元素
}
printf("/n");
enqueue(&p, '*');
enqueue(&p, '$');
prqueue(&p);
firstqueue(&p, &c);
printf("first queue is %c/n", c);
exit(0);
}
循环队列操作实现
最新推荐文章于 2022-04-06 16:07:25 发布