链队的基本操作

/**
 * @author:qq_45671732
 * @version:1.0
 */
#include "bits/stdc++.h"

using namespace std;

#define MAXQSIZE 100
#define OK 0
#define ERROR -1

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

typedef struct {
    QueuePtr front;
    QueuePtr rear;
} LinkQueue;

int InitQueue(LinkQueue &Q) {
    //链队初始化
    Q.front = Q.rear = (QueuePtr) malloc(sizeof(QNode));
    if (Q.front == NULL) {
        cout << "循环队列初始化失败" << endl;
        return ERROR;
    } else {
        Q.front->next = NULL;
        cout << "循环队列初始化成功" << endl;
        return OK;
    }
}

int DestroyQueue(LinkQueue &Q) {
    //链队销毁
    while (Q.front != NULL) {
        QNode *p = Q.front->next;
        free(Q.front);
        Q.front = p;
    }
    cout << "循环队列销毁完毕" << endl;
    return OK;
}

int EnQueue(LinkQueue &Q, int e) {
    //入队
    QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
    if (p == NULL) {
        cerr << "入队失败" << endl;
        return ERROR;
    }
    p->data = e;
    p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    cout << "入队成功" << endl;
    return OK;
}

int GetHead(LinkQueue Q) {
    //获取队头元素
    if (Q.front == Q.rear) {
        cerr << "取队头失败" << endl;
        return ERROR;
    }
    int e = Q.front->next->data;
    return e;
}

int DeQueue(LinkQueue &Q) {
    //出队
    if (Q.front == Q.rear) {
        cerr << "出队失败" << endl;
        return ERROR;
    }
    struct QNode *p = Q.front->next;
    Q.front->next = p->next;
    if (Q.rear == p) {
        Q.rear = Q.front;
    }
    delete p;
    cout << "出队成功" << endl;
    return OK;
}

int main() {
    LinkQueue Q;
    InitQueue(Q);
    int choice;
    do {
        cout << "1.链队销毁" << endl;
        cout << "2.入队" << endl;
        cout << "3.出队" << endl;
        cout << "4.获取队头元素" << endl;
        cout << "**********************" << endl;
        cout << "请输入您的选择:" << endl;
        cin >> choice;
        switch (choice) {
            case 1: {
                DestroyQueue(Q);
                break;
            }
            case 2: {
                int e;
                cout << "请输入您要入队的元素" << endl;
                cin >> e;
                EnQueue(Q, e);
                break;
            }
            case 3: {
                DeQueue(Q);
                break;
            }
            case 4: {
                int e = GetHead(Q);
                cout << "队头元素为:" << e << endl;
                break;
            }
            default: {
                exit(ERROR);
            }
        }
    } while (1);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_45671732

你们鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值