数据结构之队列

本文介绍了队列的基本概念,包括其特殊性质、操作方式及两种主要类型:顺序队列和循环队列。详细阐述了队列的数据结构及其管理机制,并通过实例展示了队列的插入与删除操作。

       队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作,进行插入的一端称为队尾,进行删除的一端称为对头或队首。常用的队列有顺序队列,循环队列等。

顺序队列:建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。如图所示:

从上图可以看出,当队列为空时,头尾指针相等,即front和rear相等,入队时执行rear++,即是在队尾插入一个元素,出队front++,即是在队首删除一个元素,当全部出队时,front和rear又相等。不论是出队还是入队,front和rear都是增长的,这样会出现溢出现象。

循环队列:为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

如图所示:在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件时front=rear,而队列判满的条件时front=(rear+1)%MaxSize。

#include <stdio.h>
#include <stdlib.h>

#define g_MAX 10

//定义队列结构
typedef struct queue
{
        char data[g_MAX];
        int front, rear;
        
}QUEUE;

//创建队列
QUEUE InitQueue()
{
    QUEUE Q;
    
    Q.front = 0;
    Q.rear = 0;
    
    return Q;
}

//插入操作
QUEUE InsertQueue(QUEUE Q, char x)
{
    //判断队列是否上溢,即
    if(Q.rear >= g_MAX)
    {
        printf("up overflow!\n");
    }
    else
    {
        Q.rear++;
        Q.data[Q.rear]=x;
        printf("insert success!\n");
    }
    return 0;
}

//删除操作
QUEUE DeleteQueue(QUEUE Q)
{
    if(Q.front == Q.rear)
    {
        printf("queue is empty!\n");
    }
    else
    {
        Q.front++;
        printf("delete success!\n");
    }
    return 0;
}

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值