1.(循环)队列顺序存储
#include <stdio.h>#include <stdlib.h>#define MaxSize 100struct QNode{int Data[MaxSize];int rear;int front;};typedef struct QNode *Queue;Queue CreateQueue();bool IsFull(Queue Q);void AddQ(Queue Q, int X);bool IsEmpty(Queue Q);int Delete(Queue Q);int main(void){Queue Q;Q = CreateQueue();AddQ(Q,6);printf("6入队\n");AddQ(Q,5);printf("5入队\n");AddQ(Q,11);printf("11入队\n");printf("%d出队\n",Delete(Q));printf("%d出队\n",Delete(Q));printf("%d出队\n",Delete(Q));if(IsEmpty(Q)){printf("队空");}return 0;}Queue CreateQueue(){Queue Q;Q = (Queue)malloc(sizeof(struct QNode));Q->rear = -1;Q->front = -1;return Q;}bool IsFull(Queue Q){return ((Q->rear + 1) % MaxSize == Q->front);}void AddQ(Queue Q, int X){if(IsFull(Q)){printf("已满");return ;}else{Q->rear = ((Q->rear) + 1) % MaxSize;Q->Data[Q->rear] = X;}}bool IsEmpty(Queue Q){return (Q->front == Q->rear);}int Delete(Queue Q){if(IsEmpty(Q)){printf("队空");return -1;}else{Q->front = (Q->front + 1) % MaxSize;return Q->Data[Q->front];}}
2.队列链式存储
#include <stdio.h>#include <stdlib.h>struct Node{int Data;struct Node *Next;};struct QNode{struct Node *front;struct Node *rear;};typedef struct QNode *Queue;Queue CreateQueue();bool IsEmpty(Queue Q);int Delete(Queue Q);void AddQ(Queue Q, int X);int main(void){Queue Q;Q = CreateQueue();printf("入队6\n");AddQ(Q,6);printf("入队7\n");AddQ(Q,7);printf("入队8\n");AddQ(Q,8);printf("出队%d\n",Delete(Q));printf("出队%d\n",Delete(Q));printf("出队%d\n",Delete(Q));return 0;free(Q);}Queue CreateQueue(){Queue Q;Q = (Queue)malloc(sizeof(struct QNode));Q->front = NULL;Q->rear = NULL;}bool IsEmpty(Queue Q){return (Q->front == NULL);}int Delete(Queue Q){struct Node *Frontcell;int FrontElem;if ( IsEmpty(Q) ){printf("队列空");return -1;}else{Frontcell = Q->front;if(Q->front == Q->rear){Q->front = NULL;Q->rear = NULL;}else{Q->front = Q->front->Next;}FrontElem = Frontcell->Data;free(Frontcell);return FrontElem;}}void AddQ(Queue Q, int X){struct Node *New;New = (struct Node*)malloc(sizeof(struct Node));New->Data = X;New->Next = NULL;if(Q->rear == NULL){Q->front = New;Q->rear = New;}else{Q->rear->Next = New;Q->rear = New;}}
