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

发布时间:2021-12-29 19:38:54 作者:柒染
来源:亿速云 阅读:180

这篇文章将为大家详细讲解有关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.队列的表示和实现

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

链队列可以定义如下:

#define  TRUE    1
#define  FALSE  0
typedef 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;
}

附录完整代码:

#include<iostream>
using namespace std;
#define OK 1
#define FALSE 0

typedef 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"<<endl;
    cout<<"入队:2"<<endl;
    cout<<"出队:3"<<endl;
    cout<<"清空队列:4"<<endl;
    cout<<"退出:5"<<endl;
}
int main()
{
    LinkQueue Q;
    while(true)
    {
        int n;
        menu();
        scanf("%d",&n);
        int e=-1;
        switch(n)
        {
            case 1:
                InitQueue(Q);
                continue;
            case 2:
                printf("请输入一个元素");
                scanf("%d",&e);
                EnQueue(Q,e);
                continue;
            case 3:
                DeQueue(Q,e);
                printf("\n出队元素%d\n",e);
                continue;
            case 4:
                ClearQueue(Q);
                printf("清空成功\n");
                continue;
            default:
                break;
        }
        if(n==5)break;
    }

}

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

推荐阅读:
  1. 数据结构-----堆的基本操作和应用
  2. 数据结构-stack的基本操作

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言 数据结构

上一篇:如何进行C++字符串和数字的去重操作和鞍点的寻找

下一篇:python调用bash shell脚本的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》