基于C语言实现链式队列

之前写过基于顺序表来实现队列,这里就写下基于链表来实现队列的一些操作
首先先要在头文件中定义两个结构体
  3 typedef struct LinkNode
  4 {
  5     LinkType data;
  6     struct LinkNode* next;
  7 }LinkNode;
  8 typedef struct LinkQueue
  9 {
 10     LinkNode* head;
 11     LinkNode* tail;
 12 }LinkQueue;
队列初始化

类似与队列初始化操作,只需要将链表的头指针和尾指针分别指向空,就完成了链式栈的初始化

  5 //队列初始化
  6 void LinkQueueInit(LinkQueue* q)
  7 {
  8     if(q == NULL)
  9     {
 10         //非法操作
 11         return ;
 12     }
 13     q->head = NULL;
 14     q->tail = NULL;
 15 }

队列的入队
其实就相当于链表的头插或者是尾插法,在这里可以自己选择方法,这里写的是头插法,详细见程序
 25 //入队(尾插)
 26 void LinkQueueFush(LinkQueue* q,LinkType value)
 27 {
 28     if(q == NULL)
 29     {
 30         //非法操作
 31         return;
 32     }
 33     LinkNode* new_node=CreateLinkNode(value);
 34     if(q->head == NULL)
 35     {
 36         q->head=q->tail=new_node;
 37         //空队列
 38         return ;
 39     } 
 40     //LinkNode* new_node =CreateLinkNode(value);
 41     q->tail->next=new_node;                                                                                 
 42     q->tail=q->tail->next;
 43 }
 44 
 45 

队列的出队
相当于链表的头删法或者是尾删法,这里选择的是头删法,详细见程序
 46 //出队
 47 void LinkQueuePop(LinkQueue* q)
 48 {
 49     if(q == NULL)
 50     {
 51         //非法操作
 52         return;
 53     }
 54     if(q->head == NULL)
 55     {
 56         //空队列
 57         return;
 58     }
 59     LinkNode* to_delete=q->head;
 60     if(q->head == q->tail)
 61     {
 62         free(to_delete);
 63         q->head=q->tail=NULL;
 64         return ;
 65     }                                                                                                       
 66     q->head=to_delete->next;
 67     free(to_delete);
 68 }

取队首元素
 69 //取队首元素
 70 int LinkQueueFront(LinkQueue* q,LinkType* value)
 71 {
 72     if(q == NULL || value == NULL)
 73     {
 74         //非法操作
 75         return 0;
 76     }
 77     if(q->head == NULL)
 78     {
 79         //空队列
 80         return 0;
 81     }
 82     *value=q->head->data;
 83     return 1;
 84 }                                                                                                           
 85 

猜你喜欢

转载自blog.csdn.net/l_x_y_hh/article/details/79855533