1.(循环)队列顺序存储

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #define MaxSize 100
    4. struct QNode
    5. {
    6. int Data[MaxSize];
    7. int rear;
    8. int front;
    9. };
    10. typedef struct QNode *Queue;
    11. Queue CreateQueue();
    12. bool IsFull(Queue Q);
    13. void AddQ(Queue Q, int X);
    14. bool IsEmpty(Queue Q);
    15. int Delete(Queue Q);
    16. int main(void)
    17. {
    18. Queue Q;
    19. Q = CreateQueue();
    20. AddQ(Q,6);
    21. printf("6入队\n");
    22. AddQ(Q,5);
    23. printf("5入队\n");
    24. AddQ(Q,11);
    25. printf("11入队\n");
    26. printf("%d出队\n",Delete(Q));
    27. printf("%d出队\n",Delete(Q));
    28. printf("%d出队\n",Delete(Q));
    29. if(IsEmpty(Q))
    30. {
    31. printf("队空");
    32. }
    33. return 0;
    34. }
    35. Queue CreateQueue()
    36. {
    37. Queue Q;
    38. Q = (Queue)malloc(sizeof(struct QNode));
    39. Q->rear = -1;
    40. Q->front = -1;
    41. return Q;
    42. }
    43. bool IsFull(Queue Q)
    44. {
    45. return ((Q->rear + 1) % MaxSize == Q->front);
    46. }
    47. void AddQ(Queue Q, int X)
    48. {
    49. if(IsFull(Q))
    50. {
    51. printf("已满");
    52. return ;
    53. }
    54. else
    55. {
    56. Q->rear = ((Q->rear) + 1) % MaxSize;
    57. Q->Data[Q->rear] = X;
    58. }
    59. }
    60. bool IsEmpty(Queue Q)
    61. {
    62. return (Q->front == Q->rear);
    63. }
    64. int Delete(Queue Q)
    65. {
    66. if(IsEmpty(Q))
    67. {
    68. printf("队空");
    69. return -1;
    70. }
    71. else
    72. {
    73. Q->front = (Q->front + 1) % MaxSize;
    74. return Q->Data[Q->front];
    75. }
    76. }

    2.队列链式存储

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. struct Node
    4. {
    5. int Data;
    6. struct Node *Next;
    7. };
    8. struct QNode
    9. {
    10. struct Node *front;
    11. struct Node *rear;
    12. };
    13. typedef struct QNode *Queue;
    14. Queue CreateQueue();
    15. bool IsEmpty(Queue Q);
    16. int Delete(Queue Q);
    17. void AddQ(Queue Q, int X);
    18. int main(void)
    19. {
    20. Queue Q;
    21. Q = CreateQueue();
    22. printf("入队6\n");
    23. AddQ(Q,6);
    24. printf("入队7\n");
    25. AddQ(Q,7);
    26. printf("入队8\n");
    27. AddQ(Q,8);
    28. printf("出队%d\n",Delete(Q));
    29. printf("出队%d\n",Delete(Q));
    30. printf("出队%d\n",Delete(Q));
    31. return 0;
    32. free(Q);
    33. }
    34. Queue CreateQueue()
    35. {
    36. Queue Q;
    37. Q = (Queue)malloc(sizeof(struct QNode));
    38. Q->front = NULL;
    39. Q->rear = NULL;
    40. }
    41. bool IsEmpty(Queue Q)
    42. {
    43. return (Q->front == NULL);
    44. }
    45. int Delete(Queue Q)
    46. {
    47. struct Node *Frontcell;
    48. int FrontElem;
    49. if ( IsEmpty(Q) )
    50. {
    51. printf("队列空");
    52. return -1;
    53. }
    54. else
    55. {
    56. Frontcell = Q->front;
    57. if(Q->front == Q->rear)
    58. {
    59. Q->front = NULL;
    60. Q->rear = NULL;
    61. }
    62. else
    63. {
    64. Q->front = Q->front->Next;
    65. }
    66. FrontElem = Frontcell->Data;
    67. free(Frontcell);
    68. return FrontElem;
    69. }
    70. }
    71. void AddQ(Queue Q, int X)
    72. {
    73. struct Node *New;
    74. New = (struct Node*)malloc(sizeof(struct Node));
    75. New->Data = X;
    76. New->Next = NULL;
    77. if(Q->rear == NULL)
    78. {
    79. Q->front = New;
    80. Q->rear = New;
    81. }
    82. else
    83. {
    84. Q->rear->Next = New;
    85. Q->rear = New;
    86. }
    87. }