千家信息网

C语言数据结构中链队列的基本操作是怎样的

发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章将为大家详细讲解有关C语言数据结构中链队列的基本操作是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.队列的定义队列 (Queue)是
千家信息网最后更新 2025年01月28日C语言数据结构中链队列的基本操作是怎样的

这篇文章将为大家详细讲解有关C语言数据结构中链队列的基本操作是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    1.队列的定义

    队列 (Queue)是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出(Fist In Fist Out,缩写为FIFO)的特性。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。 假设队列为q=(a1,a2,…,an),那么a1就是队头元素,an则是队尾元素。队列中的元素是按照a1、a2、…、an的顺序进入的, 退出队列也必须按照同样的次序依次出队,也就是说,只有在a1、a2、…、an-1都离开队列之后,an才能退出队列。

    2.队列的表示和实现

    链队列可以定义如下:

    #define  TRUE    1#define  FALSE  0typedef struct QNode{        QElemType  data;        struct QNode *next;}QNode, *QueuePtr;typedef struct{        QueuePtr  front;        QueuePtr  rear;}LinkQueue;

    (1) 初始化操作

    Status InitQueue(LinkQueue &Q){        Q.front = Q.rear = (Queueptr) malloc(sizeof(QNode));       if(!Q.front) exit ( OVERFLOW);       Q.front ->next = NULL;       return OK;}

    (2)销毁队列

    Status DestroyQueue(LinkQueue &Q){         while(Q.front) {        Q.rear = Q.front->next;        free (Q.front);        Q.front = Q.rear;        }        return OK;}

    (3) 入队操作

    Status EnQueue (LinkQueue &Q, QelemType e){         p= (QueuePtr) malloc(sizeof(QNode));        if (!p) exit ( OVERFLOW);        p->data = e;  p->next = NULL;        Q.rear -> next =p;        Q.rear = p;        return OK;}

    (4) 出队操作

    Status DeQueue (LinkQueue &Q, QelemType &e){        if ( Q.front == Q.rear) return ERROR;        p=Q.front->next;        e=p->data;        Q.front->next =p->next;        if (Q.rear == p) Q.rear = Q.front;        free(p);        return OK;}

    附录完整代码:

    #includeusing namespace std;#define OK 1#define FALSE 0typedef int QElemType;typedef int Status;typedef struct QNode{    QElemType data;    struct QNode *next;}QNode,*QueuePtr;typedef struct{    QueuePtr font;    QueuePtr near;}LinkQueue;Status InitQueue(LinkQueue &Q){    Q.font=(QueuePtr)malloc(sizeof(QNode));    if(!Q.font) exit(FALSE);    Q.font->next=NULL;    Q.near=Q.font;    return OK;}Status QueueEmpty(LinkQueue Q){    if(Q.font->next) return OK;    return FALSE;}Status EnQueue(LinkQueue &Q,QElemType e){    QueuePtr p=(QueuePtr)malloc(sizeof(QNode));    p->data=e;    Q.near->next = p;    Q.near = Q.near->next;    p->next = NULL;    return OK;}Status DeQueue(LinkQueue &Q,QElemType &e){    if(!Q.font->next) return FALSE;    QueuePtr p;    p=Q.font->next;    e=p->data;    Q.font->next=p->next;    if(Q.near==p) Q.near=Q.font;   //当是最后一个元素时,Q.font=NULL,Q.near=Q.font    free(p);    return OK;}Status ClearQueue(LinkQueue &Q){    QueuePtr p;    p=Q.font->next;    QueuePtr q;    while(p)    {        q=p;        p=p->next;        Q.font->next=p;        free(q);    }    Q.near=Q.font;    return OK;}void menu(){    cout<<"初始化队列:1"<

    关于C语言数据结构中链队列的基本操作是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

    0