链表实现队列

插入队列时,注意判断队列是否为空

出队列时,注意判断:1 队列是否为空 2 是否是最后一个元素出队列 3 正常出队列

#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
 int data;
 struct list*next;
}List;
typedef struct queue
{
 List*front;
 List*rear; 
}Queue;
void init_queue(Queue*q)
{
 q->front=q->rear=NULL; 
}
void inqueue(Queue *q,int data)
{
 List*newnode=(List*)malloc(sizeof(List));
 newnode->next=NULL;
 newnode->data=data;
 if(q->front==NULL && q->rear==NULL)//如果是空队列
 {
  q->front=q->rear=newnode;
 }
 else//如果队列非空
 {
  q->rear->next=newnode;
  q->rear=newnode; 
 }  
}
int dequeue(Queue*q)
{ List*temp=NULL;
 int result;
 //如果队列为空
 if(q->front==NULL && q->rear==NULL)
 {
  printf("queue is empty,out of queue failed\n");
  return -1;
 }
 //如果最后一个元素出队列
 else if(q->front==q->rear)
 {
  temp=q->front;
  result=temp->data;
  q->front=q->rear=NULL;
  free(temp);
  return result;   
 }
 //非最后元素出队列 
 else
 {
  temp=q->front;
  result=temp->data;
  q->front=q->front->next;
  free(temp);
  return result;
 } 
}
int queue_isEmpty(Queue*q)
{
 if(q->front==q->rear && q->front==NULL)
  return 1;
 else
  return 0; 
}

int main()
{ int i;
 Queue*q=(Queue*)malloc(sizeof(Queue));
 init_queue(q);
 for(i=0;i<10;i++)
  inqueue(q,i);
 while(!queue_isEmpty(q))
 {
  printf("%d\n",dequeue(q));
 } 
 
}

转载于:https://www.cnblogs.com/ITfeng/archive/2012/04/21/2462565.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值