以下为操作队列的算法,该队列为静态队列,用循环数组实现。
给该队列分配的内存长度为len+1,但实际只用了len个内存空间来保存数据,这样做是为了更方便判断队列的满与空。
队列中front位置中存放的是队首的数据,rear位置的前一个位置中存放队尾的数据,而rear位置中则没有数据存放,
这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int len;
typedef struct Queue
{
int *pBase;
int front;
int rear;
} QUEUE,*PQUEUE;
PQUEUE creat_queue();
bool enter_queue(PQUEUE,int);
bool full_queue(PQUEUE);
bool empty_queue(PQUEUE);
void traverse_queue(PQUEUE);
bool out_queue(PQUEUE,int *);
int main()
{
int data_save;
PQUEUE pQueue = creat_queue();
enter_queue(pQueue,1);
enter_queue(pQueue,2);
enter_queue(pQueue,3);
enter_queue(pQueue,4);
traverse_queue(pQueue);
out_queue(pQueue,&data_save);
traverse_queue(pQueue);
return 0;
}
PQUEUE creat_queue()
{
printf("Input the length of the queue:\n");
scanf("%d",&len);
PQUEUE pQueue = (PQUEUE)malloc(sizeof(QUEUE));
pQueue->pBase = (int *)malloc(sizeof(int)*(len+1));
if(NULL==pQueue || NULL==pQueue->pBase)
{
printf("malloc failed!");
exit(-1);
}
else
{
pQueue->front = 0;
pQueue->rear = 0;
}
return pQueue;
}
bool full_queue(PQUEUE pQueue)
{
if(pQueue->front == (pQueue->rear+1)%(len+1))
return true;
else
return false;
}
bool empty_queue(PQUEUE pQueue)
{
if(pQueue->front == pQueue->rear)
return true;
else
return false;
}
bool enter_queue(PQUEUE pQueue,int val)
{
if(full_queue(pQueue))
return false;
else
{
pQueue->pBase[pQueue->rear] = val;
pQueue->rear = (pQueue->rear+1)%(len+1);
return true;
}
}
bool out_queue(PQUEUE pQueue,int *out_data)
{
if(empty_queue(pQueue))
return false;
else
{
*out_data = pBase[pQueue->front];
pQueue->front = (pQueue->front+1)%(len+1);
return true;
}
}
void traverse_queue(PQUEUE pQueue)
{
if(empty_queue(pQueue))
printf("there on datas in the queue!\n");
else
{
int i = pQueue->front;
printf("now datas in the queue are:\n");
while(i != pQueue->rear)
{
printf("%d ",pQueue->pBase[i]);
i = (i+1)%(len+1);
}
printf("\n");
}
return ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步