循环队列的定义:

#define MAXSIZE 10

typedef struct {
    int data[MAXSIZE];
    int front;
    int rear;
} SqQueue;

链队列的定义:

typedef struct QNode {
    int data;
    struct QNode *next;
} QNode, *QueuePtr;

typedef struct {
    QueuePtr front; // 队头指针
    QueuePtr rear;  // 队尾指针
} LinkQueue;

初始化/创建操作:

// 循环队列初始化
void InitQueue(SqQueue *Q) {
    Q->front = Q->rear = 0;
}

// 链队列初始化
void InitQueue(LinkQueue *Q) {
    Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
    if(!Q->front) {
        exit(0);
    }
    Q->front->next = NULL;
}

入队操作:

// 循环队列入队
void EnQueue(SqQueue *Q, int x) {
    if((Q->rear+1)%MAXSIZE == Q->front) {
        printf("Queue is full!\n");
    } else {
        Q->data[Q->rear] = x;
        Q->rear = (Q->rear+1)%MAXSIZE;
    }
}

// 链队列入队
void EnQueue(LinkQueue *Q, int x) {
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if(!p) {
        exit(0);
    }
    p->data = x;
    p->next = NULL;
    Q->rear->next = p;
    Q->rear = p;
}

出队操作:

// 循环队列出队
void DeQueue(SqQueue *Q, int *x) {
    if(Q->front == Q->rear) {
        printf("Queue is empty!\n");
    } else {
        *x = Q->data[Q->front];
        Q->front = (Q->front+1)%MAXSIZE;
    }
}

// 链队列出队
void DeQueue(LinkQueue *Q, int *x) {
    if(Q->front == Q->rear) {
        printf("Queue is empty!\n");
    } else {
        QueuePtr p = Q->front->next;
        *x = p->data;
        Q->front->next = p->next;
        if(Q->rear == p) {
            Q->rear = Q->front;
        }
        free(p);
    }
}

菜单实现:

int main() {
    int choice, x;
    SqQueue sq;
    LinkQueue lq;
    InitQueue(&sq);
    InitQueue(&lq);
    while(1) {
        printf("1. EnQueue\n");
        printf("2. DeQueue\n");
        printf("3. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);
        switch(choice) {
            case 1:
                printf("Enter the number to be added: ");
                scanf("%d", &x);
                EnQueue(&sq, x);
                EnQueue(&lq, x);
                break;
            case 2:
                DeQueue(&sq, &x);
                printf("DeQueue: %d\n", x);
                DeQueue(&lq, &x);
                printf("DeQueue: %d\n", x);
                break;
            case 3:
                exit(0);
                break;
            default:
                printf("Invalid choice!\n");
                break;
        }
    }
    return 0;
}

``
用c语言定义存储整数的循环队列和链队列。编写初始化创建、入队和出队操作的并用菜单实现。

原文地址: http://www.cveoy.top/t/topic/fERO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录