队列的模拟

         队列的特点是先进先出,队伍的头部只能删除,尾部只能添加;使用循环链表的方式进行队列模拟。这里模拟出队、入队。程序如下:

#include<stdio.h>
#include<malloc.h>


typedef struct Queue
{
int * pbase;//用来保存数组
int front;  //描述队列的头
int rear;   //描述队列的尾
} QUEUE;




#define LENTH 6              //注意不要分号!!!!
bool init_Queue(QUEUE *);
bool en_Queue(QUEUE * pQ,int val);
bool full_Queue(QUEUE * pQ);
bool empty_Queue(QUEUE * pQ);
bool out_Queue(QUEUE * pQ,int *pVal);
bool traverse_Queue(QUEUE * pQ);


int main()
{
int out_val;
QUEUE Q;
init_Queue(&Q);
en_Queue(&Q,60);
en_Queue(&Q,300);
en_Queue(&Q,700);
en_Queue(&Q,1380);
    traverse_Queue(&Q);
out_Queue(&Q,&out_val);
printf("删除的元素是 %d\n",out_val);
    traverse_Queue(&Q);
return 0;
}


//初始化队列
bool init_Queue(QUEUE * pQ)
{
pQ->front=0;
pQ->rear=0;
pQ->pbase=(int *)malloc(sizeof(int)*LENTH);
if(pQ->pbase==NULL)
{
printf("初始化失败\n");
return false;
}
else return true;
}


//判断队列是否已经满了
bool full_Queue(QUEUE * pQ)
{
if( pQ->front== (pQ->rear+1)%LENTH  )
{
printf("队列满了\n");
return true;
}
else return false;
}


//入队
bool en_Queue(QUEUE * pQ,int val)
{
if(full_Queue(pQ))
return false;
else
{
pQ->pbase[pQ->rear]=val;
pQ->rear=(pQ->rear+1)%LENTH;
}
return true;
}


//判断队列是否为空
bool empty_Queue(QUEUE * pQ)
{
if(pQ->rear==pQ->front)
{
printf("队列为空\n");
return true;
}
else return false;
}


//出队
bool out_Queue(QUEUE * pQ,int *pVal)
{
if(empty_Queue(pQ))
{
printf("无法删除队列中的元素\n");
return false;
}
else
{
*pVal=pQ->pbase[pQ->front];
pQ->front=(pQ->front+1)%LENTH;
printf("\n");
return true;
}
}


//队列的遍历
bool traverse_Queue(QUEUE * pQ)
{
if(empty_Queue(pQ))
{
printf("无法遍历\n");
return false;
}
else
{
int i=pQ->front;
printf("队列中的元素是: ");
while(i!=pQ->rear)
{
printf("%d ",pQ->pbase[i]);
i=(i+1)%LENTH;             //这里要注意,不是i=i+1 !!!
}
printf("\n");
return true;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值