ITfeng

 

链表实现队列

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

出队列时,注意判断: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));
 } 
 
}

posted on 2012-04-21 23:23  ITfeng  阅读(238)  评论(0编辑  收藏  举报

导航