链队列的基本操作

来源:互联网 发布:苹果系统删除软件 编辑:程序博客网 时间:2024/04/30 00:08

C++链队列的基本操作

#include<iostream>using namespace std;typedef int QueueElementType;typedef struct Node{    QueueElementType data;    struct Node *next;}LinkQueueNode;typedef struct{    LinkQueueNode *front;    LinkQueueNode *rear;}LinkQueue;void Initqueue(LinkQueue &Q);void Input(LinkQueue &Q);void Output(LinkQueue Q);bool Isempty(LinkQueue Q);void Enqueue(LinkQueue &Q, QueueElementType e);void Delqueue(LinkQueue &Q, QueueElementType &e);void Gethead(LinkQueue Q, QueueElementType &e);void Clear(LinkQueue &Q);void Interface();int main(){    Interface();    LinkQueue Q;    Initqueue(Q);    int n;    while (1)    {        cout << "请输入操作序号:";        cin >> n;        switch (n)        {        case 1:        {            cout << "请依次输入数据,并以-1作为结束标记:" << endl;            Input(Q);            break;        }        case 2:        {            cout << "队列中的元素:" << endl;            Output(Q);            break;        }        case 3:        {            if (Isempty(Q))            {                cout << "队列为空!" << endl;            }            else            {                cout << "队列不为空!" << endl;            }            break;        }        case 4:        {            QueueElementType e;            cout << "请输入入队列元素:";            cin >> e;            Enqueue(Q, e);            break;        }        case 5:        {            QueueElementType e;            Delqueue(Q, e);            cout << "元素" << e << "已出队列!" << endl;            break;        }        case 6:        {            QueueElementType e;            Gethead(Q, e);            cout << "队头元素为:" << e << endl;            break;        }        case 7:        {            Clear(Q);            break;        }        case 0:        {            exit(0);            break;        }        default:        {            cout << "输入的操作序号不正确!请核对..." << endl;        }        }    }    return 0;}void Initqueue(LinkQueue &Q){    Q.front = new LinkQueueNode;    Q.rear = Q.front;    Q.front->next = NULL;}void Input(LinkQueue &Q){    int e;    while (1)    {        cin >> e;        if (e == -1)        {            break;        }        Enqueue(Q, e);    }}void Output(LinkQueue Q){    if (Isempty(Q))    {        cout << "队列为空!" << endl;        exit(1);    }    LinkQueueNode *q = Q.front->next;    while (q)    {        cout << q->data << " ";        q = q->next;    }    cout << endl;}bool Isempty(LinkQueue Q){    if (Q.front->next == NULL)    {        return true;    }    else    {        return false;    }}void Enqueue(LinkQueue &Q, QueueElementType e){    LinkQueueNode *q = new LinkQueueNode;    q->data = e;    q->next = NULL;    Q.rear->next = q;    Q.rear = q;}void Delqueue(LinkQueue &Q, QueueElementType &e){    if (Isempty(Q))    {        cout << "队列为空!" << endl;        exit(1);    }    LinkQueueNode *q;    q = Q.front->next;    Q.front->next = q->next;    if (Q.rear == q)    {        Q.rear = Q.front;    }    e = q->data;    delete q;}void Gethead(LinkQueue Q, QueueElementType &e){    if (Isempty(Q))    {        cout << "队列为空!" << endl;        exit(1);    }    e = Q.front->next->data;}void Clear(LinkQueue &Q){    if (Isempty(Q))    {        cout << "队列为空!" << endl;        exit(1);    }    LinkQueueNode *p, *q;    Q.rear = Q.front;    p = Q.front->next;    Q.front->next = NULL;    while (p)    {        q = p;        p = p->next;        delete q;    }}void Interface(){    cout << "***************欢迎使用链队列系统***************" << endl;    cout << "1:输入队列                  2:输出队列" << endl;    cout << "3:判断队列是否为空          4:入队列" << endl;    cout << "5:出队列                    6:取队头元素" << endl;    cout << "7:清空队列                  0:退出" << endl;    cout << "*************************************************" << endl;    cout << "输入0-7之间的数:" << endl;}
0 0
原创粉丝点击