顺序队列和链队的定义和基本操作(c++实现)

2023-11-08

循环队列

#include <iostream>

using namespace std;
#define MAXSIZE 100
typedef struct
{
    int *base;//存储空间的基地址
    int front;//头指针
    int rear;//尾指针
}SqQueue;
void InitQueue(SqQueue &Q)
{
    Q.base=new int[MAXSIZE];
    Q.front=Q.rear=0;
}
int QueueLength(SqQueue Q)//求队列长度
{
    return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
void EnQueue(SqQueue &Q,int e)//入队
{
    if((Q.rear+1)%MAXSIZE==Q.front){cout<<"队满"<<endl;return;}
    Q.base[Q.rear]=e;
    Q.rear=(Q.rear+1)%MAXSIZE;
}
void DeQueue(SqQueue &Q,int &e)//出队
{
    if(Q.front==Q.rear){cout<<"队空"<<endl;return;}
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXSIZE;
}
int GetHead(SqQueue Q)//获取队首元素
{
    if(Q.front!=Q.rear)
    return Q.base[Q.front];
}
int main()
{
    SqQueue Q;
    InitQueue(Q);
    EnQueue(Q,1);
    EnQueue(Q,5);
    EnQueue(Q,7);
    int ans1=GetHead(Q);
    cout<<ans1<<endl;
    DeQueue(Q,ans1);
    cout<<ans1<<endl;
    DeQueue(Q,ans1);
    cout<<ans1<<endl;
    int length=QueueLength(Q);
    cout<<length<<endl;
    return 0;
}

链队

#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.front=Q.rear=new QNode;//生成新结点作为头结点,队头和队尾指针指向此结点
    Q.front->next=NULL;//头结点的指针域为空
}
void EnQueue(LinkQueue &Q,int e)
{//插入元素e
    QNode *p;
    p=new QNode;
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}
void DeQueue(LinkQueue &Q,int &e)
{//删除队头元素,用e返回其值
    if(Q.front==Q.rear){cout<<"队空"<<endl;return;}
    QNode *p;
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)Q.rear=Q.front;
    delete p;
}
int GetHead(LinkQueue Q)
{//返回队头元素,不修改队头指针
    if(Q.front!=Q.rear)
    return Q.front->next->data;
}
int main()
{
     LinkQueue Q;
    InitQueue(Q);
    EnQueue(Q,1);
    EnQueue(Q,5);
    EnQueue(Q,7);
    int ans1=GetHead(Q);
    cout<<ans1<<endl;
    DeQueue(Q,ans1);
    cout<<ans1<<endl;
    DeQueue(Q,ans1);
    cout<<ans1<<endl;

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序队列和链队的定义和基本操作(c++实现) 的相关文章

随机推荐