1. /*
    2. 此文件用于创建一个链式队列
    3. 分析:
    4. 我们需要创建一个链表,然后设置front、rear指针,用来模拟入队出队的过程
    5. */
    6. //#define TYPE biTree*
    7. #define TYPE char
    8. //#define TYPE int
    9. struct biTree {//新增树节点
    10. char data;
    11. struct biTree *lchild;
    12. struct biTree *rchild;
    13. };
    14. struct Link {
    15. //TYPE data;
    16. TYPE node;
    17. struct Link *next;
    18. };
    19. struct LinkQueue {
    20. struct Link *front, *rear;
    21. };
    22. #include <stdio.h>
    23. #include <stdlib.h>
    24. //创建一个空链表
    25. Link* createLink() {
    26. int n, data;
    27. char letter;
    28. struct Link *q;
    29. struct Link *head = (struct Link*) malloc(sizeof(struct Link));
    30. head->next = NULL;
    31. q = head;
    32. return head;
    33. }
    34. //创建链队
    35. LinkQueue *create() {
    36. struct Link *h,*p;
    37. struct LinkQueue *lq=(struct LinkQueue *)malloc(sizeof(struct LinkQueue));
    38. h = createLink();
    39. p = h->next;
    40. lq->front = lq->rear = h;
    41. return lq;
    42. }
    43. //判断空
    44. bool isEmpty(LinkQueue *lq) {
    45. return lq->front == lq->rear;
    46. }
    47. //入队
    48. bool enQueue(LinkQueue *lq,TYPE data) {//队尾插入
    49. struct Link *newd = (struct Link *)malloc(sizeof(struct Link));
    50. newd->node = data;
    51. lq->rear->next = newd;
    52. lq->rear = newd;
    53. lq->rear->next = NULL;
    54. return true;
    55. }
    56. //出队
    57. bool deQueue(LinkQueue *lq,TYPE *data) {
    58. if (isEmpty(lq))return false;
    59. struct Link *p = lq->front->next;//保存下一个节点
    60. *data = lq->front->next->node;//取出队首节点值
    61. lq->front->next = p->next;//删除队首节点
    62. if (lq->rear==p) {
    63. lq->rear = lq->front;
    64. }
    65. free(p);
    66. return true;
    67. }
    68. //打印队列中元素
    69. void printQ(LinkQueue *lq) {
    70. Link *p = lq->front->next;
    71. while (p!=NULL) {
    72. printf("%c",p->node);
    73. p = p->next;
    74. }
    75. };