数据结构——队列的C语言实现

这篇博客介绍了如何使用C语言实现队列的数据结构,包括顺序表和链表两种方式。首先讲解了队列的基本概念,然后详细阐述了顺序表结构的队列初始化、入队、出队和求队列长度的函数实现。接着,展示了链表结构的队列操作,同样包括初始化、入队、出队和求队列长度。在每个实现后面都附有测试用例来验证功能的正确性。
摘要由CSDN通过智能技术生成
1.什么是队列?

在这里插入图片描述

2.队列的抽象数据类型描述

在这里插入图片描述

3.队列之顺序表的C语言实现
#include<stdio.h>
#include<stdlib.h>

#define MaxSize 5
#define ElementType int
#define ERROR -1

typedef struct QNode *Queue;
struct QNode{
        ElementType Data[MaxSize];
        int rear;
        int front;
};
Queue PtrQ;

//1.初始化
Queue MakeEmpty()
{
        Queue PtrQ;
        PtrQ=(Queue)malloc(sizeof(struct QNode));
        PtrQ->rear=0;
        PtrQ->front=0;
        return PtrQ;
}

//2.入队列
void AddQ(ElementType item,Queue PtrQ)
{
        if((PtrQ->rear+1)%MaxSize==PtrQ->front){
                printf("队列满\n");
                return;
        }
        PtrQ->rear=(PtrQ->rear+1)%MaxSize;
        PtrQ->Data[PtrQ->rear]=item;
}

//3.出队列
ElementType DeleteQ(Queue PtrQ)
{
        if(PtrQ->rear==PtrQ->front){
                printf("队列为空,无法删除\n");
                return ERROR;
        }
        PtrQ->front=PtrQ->front+1;
        return PtrQ->Data[PtrQ->front];
}

//4.求队列长度
int Length(Queue PtrQ)
{
        return PtrQ->rear-PtrQ->front;
}

int main()
{
        int i,LengthQ;
        PtrQ=MakeEmpty();
        AddQ(24,PtrQ);
        AddQ(34,PtrQ);
        AddQ(45,PtrQ);
        AddQ(76,PtrQ);
        AddQ(89,PtrQ);

        LengthQ=Length(PtrQ);
        printf("队列长:%d\n",LengthQ);
        for(i=PtrQ->front+1;i<PtrQ->rear+1;i++){
                printf("%d  ",PtrQ->Data[i]);
        }
        printf("\n");

        printf("删除:%d\n",DeleteQ(PtrQ));


        LengthQ=Length(PtrQ);
        printf("队列长:%d\n",LengthQ);
        for(i=PtrQ->front+1;i<PtrQ->rear+1;i++){
                printf("%d  ",PtrQ->Data[i]);
        }   
        printf("\n");
        return 0;
}
4.队列之链式表的C语言实现
#include<stdio.h>
#include<stdlib.h>

#define ElementType int
#define ERROR -1

typedef struct QNode *Queue;
struct QNode{
        ElementType Data;
        Queue Next;
};

//1.初始化
Queue MakeEmpty()
{
        Queue PtrQ;
        PtrQ = (Queue)malloc(sizeof(struct QNode));
        PtrQ->Next=NULL;
        return PtrQ;
}

//2.入队列
Queue AddQ(ElementType item,Queue Rear)
{
        Queue PtrQ;
        PtrQ=(Queue)malloc(sizeof(struct QNode));
        PtrQ->Data=item;
        PtrQ->Next=NULL;
        Rear->Next=PtrQ;
        Rear=PtrQ;
        return Rear;
}

//3.出队列
Queue DeleteQ(Queue Front,Queue Rear)
{
        Queue PtrQ;
        if(Front->Next==NULL){
                printf("队列为空\n");
                return Rear;
        }
        PtrQ=Front->Next;
        printf("删除元素:%d\n",PtrQ->Data);
        Front->Next=PtrQ->Next;
        if(PtrQ==Rear){
                Rear=Front;
        }
        free(PtrQ);
        return Rear;
}

//4.求队列长度
int Length(Queue Front,Queue Rear)
{
        int i=0;
        while(Front!=Rear){
                i++;
                Front=Front->Next;
        }
        return i;
}

int main()
{
        int i,length;
        Queue Rear,Front;
        Front=Rear=MakeEmpty();
        Rear=AddQ(23,Rear);
        Rear=AddQ(51,Rear);
        Rear=AddQ(78,Rear);

        length=Length(Front,Rear);
        printf("队列长:%d\n",length);
        Queue PtrQ1=Front->Next;
        for(i=0;i<length;i++){
                printf("%d  ",PtrQ1->Data);
                PtrQ1=PtrQ1->Next;
        }
        printf("\n");

        Rear=DeleteQ(Front,Rear);
        length=Length(Front,Rear);
        printf("队列长:%d\n",length);
        Queue PtrQ2=Front->Next;
        for(i=0;i<length;i++){
                printf("%d  ",PtrQ2->Data);
                PtrQ2=PtrQ2->Next;
        }
        printf("\n");
        return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值