链队的实现

语言:C++

#include <iostream>
using namespace std;

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

//初始化
void InitQueue(LinkQueue &Q)
{
    //构造一个空队列Q
    Q.front=Q.rear=new QNode;
    Q.front->next=NULL;
}

//入队
void EnQueue(LinkQueue &Q,int e)
{
    //插入元素e为Q的新的队尾元素
    QNode *p;
    p=new QNode;
    p->data=e;
    p->next=NULL;Q.rear->next=p;
    Q.rear=p;
}

//出队
int DeQueue(LinkQueue &Q,int &e)
{
    //删除Q的队头元素,用e返回其值
    QNode *p;
    if(Q.front==Q.rear)cout<<"队尾空,出队失败!"<<endl;
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)Q.rear=Q.front;
    delete p;
    return e;
}

//求队长
int QueueLength(LinkQueue Q)
{
    int i=0;
    QNode *p;
    p=Q.front->next;
    while(p!=Q.rear)
    {
        i++;
        p=p->next;
    }
    p=p->next;
    i++;
    return i;
}

//输出队
void display(LinkQueue &Q)
{
    QNode *p;
    p=Q.front->next;
    cout<<"[";
    while(p!=Q.rear)
    {
        cout<<p->data<<"<";
        p=p->next;
    }
    cout<<p->data;
    cout<<"]"<<endl;
}

int main()
{
    LinkQueue Q;int x;int e;int i;
    cout<<"欢迎使用循环队列!功能如下:"<<endl;
    cout<<"--------------------------"<<endl;
    cout<<"[1].初始化       [2].入队"<<endl;
    cout<<"[3].出队         [4].取队长"<<endl;
    cout<<"[5].输出队       [0].退出"<<endl;
    cout<<"--------------------------"<<endl;
    cout<<"请输入:";cin>>x;
    while(x)
    {
        switch(x)
        {
            case 1:InitQueue(Q);break;
            case 2:cout<<"请输入要入队的元素:";cin>>e;EnQueue(Q,e);break;
            case 3:i=DeQueue(Q,e);cout<<"出队元素为:"<<i<<endl;break;
            case 4:i=QueueLength(Q);cout<<"当前队长为:"<<i<<endl;break;
            case 5:cout<<"当前队列为(队头在前):"<<endl;display(Q);break;
            case 0:break;
            default:cout<<"您的选择错误,请重新输入!"<<endl;
        }
        cout<<"请选择您需要的功能:";cin>>x;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42451835/article/details/83504225