数据结构学习之路(四)用数组简单实现循环队列
程序员文章站
2022-07-14 12:29:26
...
若有写的不妥的地方,留言或在通过文章下方邮箱联系我即可,万分感谢。
我是在mac系统下调试的代码,需要include的包可能会与其他系统略有不同。
# include <stdio.h>
# include <stdlib.h>
typedef struct Queue{
int *pBase;
int front;
int rear;
}*PQUEUE, QUEUE;
void init(PQUEUE);
void showQueue(PQUEUE);
bool isFull(PQUEUE);
bool isEmpty(PQUEUE);
bool in_queue(PQUEUE, int);
bool out_queue(PQUEUE, int *);
int main(void){
PQUEUE pQueue;
init(pQueue);
in_queue(pQueue,1);
in_queue(pQueue,2);
showQueue(pQueue);
int val;
out_queue(pQueue, &val);
printf("%d\n", val);
out_queue(pQueue, &val);
printf("%d\n", val);
out_queue(pQueue, &val);
printf("%d\n", val);
return 0;
}
void init(PQUEUE pQueue){
pQueue->pBase = (int *)malloc(sizeof(int) * 10);
if(pQueue->pBase==NULL){
printf("%s\n", "内存分配失败!");
exit(-1);
}
pQueue->front = 0;
pQueue->rear = 0;
}
bool in_queue(PQUEUE pQueue, int val){
if (isFull(pQueue))
{
printf("%s\n", "栈已满!");
return false;
}
pQueue->pBase[pQueue->rear] = val;
pQueue->rear = (pQueue->rear+1)%10;
return true;
}
bool out_queue(PQUEUE pQueue, int * pVal){
if (isEmpty(pQueue)){
printf("%s\n", "栈已空!");
return false;
}
* pVal = pQueue->pBase[pQueue->front];
pQueue->front = (pQueue->front+1)%10;
return true;
}
bool isFull(PQUEUE pQueue){
if ( (pQueue->rear+1)%10 == pQueue->front )
return true;
return false;
}
bool isEmpty(PQUEUE pQueue){
if(pQueue->front == pQueue->rear)
return true;
return false;
}
void showQueue(PQUEUE pQueue){
int i = pQueue->front;
while(i != pQueue->rear){
printf("%d ", pQueue->pBase[i]);
i = (i+1)%10;
}
printf("\n");
}
email: [email protected]
版权声明:博客编写不易,转载时请注明出处,万分感谢 !
https://blog.csdn.net/zyy_2018/article/details/79772177
上一篇: 数据结构--循环队列(数组实现)