链队列基本运算

虽然都是基本的数据结构,也很简单,但是亲自打下代码还是收获不小。

都是编译过了的。

 

[cpp][/cpp] view plaincopy

  1. //
  2. //LiQueue.h
  3. //链队基本运算
  4. //2013-10-15 22:49
  5. //
  6. #pragma once
  7. typedef int ElemType;
  8. struct QNode
  9. {
  10.     ElemType data;
  11.     QNode* next;
  12. };
  13. struct LiQueue
  14. {
  15.     QNode* front;
  16.     QNode* rear;
  17. };
  18. void InitQueue(LiQueue* &q);
  19. void ClearQueue(LiQueue* &q);
  20. void enQueue(LiQueue* &q,ElemType e);  //进队
  21. int deQueue(LiQueue* &q,ElemType& e);  //出队
  22. void DisQueue(LiQueue* q);
[cpp][/cpp] view plaincopy

  1. #include “LiQueue.h”
  2. #include <malloc.h>
  3. #include <stdio.h>
  4. void InitQueue( LiQueue* &q )
  5. {
  6.     q = (LiQueue*)malloc(sizeof(LiQueue));
  7.     q->front = q->rear = NULL;
  8. }
  9. void ClearQueue( LiQueue* &q )
  10. {
  11.     QNode* p = q->front,*t = p->next;
  12.     while( NULL != t)
  13.     {
  14.         free(p);
  15.         p = t;
  16.         t = t->next;
  17.     }
  18. }
  19. void enQueue( LiQueue* &q,ElemType e )
  20. {
  21.     QNode* s = (QNode*)malloc(sizeof(LiQueue));
  22.     s->data = e;
  23.     s->next = NULL;
  24.     if (q->rear == NULL)  //空队
  25.     {
  26.         q->rear = q->front = s;
  27.     }
  28.     else
  29.     {
  30.         q->rear->next = s;
  31.         q->rear = s;
  32.     }
  33. }
  34. int deQueue( LiQueue* &q,ElemType& e )
  35. {
  36.     if (q->rear == NULL)  //空队
  37.     {
  38.         return 0;
  39.     }
  40.     QNode* t = q->front;
  41.     e = q->front->data;
  42.     if ( q->front == q->rear)
  43.     {
  44.         q->front = q->rear = NULL;
  45.     }
  46.     else
  47.     {
  48.         q->front = q->front->next;
  49.     }
  50.     free(t);
  51.     return 1;
  52. }
  53. void DisQueue( LiQueue* q )
  54. {
  55.     if (q->front == NULL)
  56.     {
  57.         return;
  58.     }
  59.     QNode* p = q->front;
  60.     while(p != q->rear)
  61.     {
  62.         printf(“%d,”,p->data);
  63.         p = p->next;
  64.     }
  65.     printf(“%d,”,p->data);
  66.     printf(“\n”);
  67. }
[cpp][/cpp] view plaincopy

  1. #include “LiQueue.h”
  2. int main()
  3. {
  4.     LiQueue* q;
  5.     InitQueue(q);
  6.     enQueue(q,1);
  7.     DisQueue(q);
  8.     enQueue(q,2);
  9.     DisQueue(q);
  10.     enQueue(q,3);
  11.     DisQueue(q);
  12.     enQueue(q,4);
  13.     DisQueue(q);
  14.     enQueue(q,5);
  15.     DisQueue(q);
  16.     ElemType data;
  17.     deQueue(q,data);
  18.     DisQueue(q);
  19.     ClearQueue(q);
  20.     return 0;
  21. }

标签