队列的十个问题

1、队列与栈的区别

栈是先进后出,而队列是先进先出。队列是特殊的线性表,仅能从队头和队尾进行操作。队头:取出数据的数据的一端,队尾:放入数据的一端。而栈仅能从栈顶进行操作。

2、常见的队列的操作

创建队列:create queue;参数指定队列可以存储的元素的最大数量,此函数只适用于动态分配数组的队列。

销毁队列:destory queue;只适用于链式和动态分配内存的队列。

3、循环队列的性质

1.头指针指向对头元素,尾指针指向队尾的下一个位置。(这里的指针都是为指针,实际是数组序号)

2.为了区分队满与对空,则定义一个存储空间为MAX_QSIZE大小的队列只允许存放MAX_QSIZE-1个数据。

3.判空条件为:if(Q.front ==Q.rear) return true;

   判满条件为:if((Q.rear+1)%MAX_QSIZE==Q.front) return true;

4.循环队列的长度为:(Q.read-Q.front+MAX_SIZE)%MAX_QSIZE

5.当删除对头元素或者在对尾插入元素时指针均需向后移动。操作为:

    Q.rear=(Q.rear+1)%MAX_QSIZE;

    Q.front=(Q.front+1)%MAX_QSIZE.

4、如何区分空队和满队

队头指针在队尾指针的下一位置时,队满。 Q.front == (Q.rear + 1) % MAXSIZE 因为队头指针可能又重新从0位置开始,而此时队尾指针是MAXSIZE - 1,所以需要求余。 
     当队头和队尾指针在同一位置时,队空。 Q.front == Q.rear;

5、假溢出现象的原因

在非空队列里,队首指针始终指向队头元素,而队尾指针始终指向队尾元素的下一位置。顺序队列中存在“假溢出”现象。因为在入队和出队操作中,头、尾指针只增加不减小,致使被删除元素的空间永远无法重新利用。因此,尽管队列中实际元素个数可能远远小于数组大小,但可能由于尾指针巳超出向量空间的上界而不能做入队操作。该现象称为假溢出。

6、队列的顺序存储结构

顺序存储结构存储的队列称为顺序队列.和顺序表一样,用一个一维数组存.对头在数组的低下标端,队尾设在高下表端.队头,队尾指针值是数组元素的下标.对头指针始终指向对头结点的前一个结点位置,初始值为0.队尾指针是指向队尾结点位置,初始值也为0

7、队列的插入操作

SECYCLEQUEUE inCycleQueue(SECYCLEQUEUE  Q,CDT x)

{

   if((Q.rear+1)%CM==Q.front)  

{

        printf("queue is full!\n");

    }

else{

Q.rear=(Q.rear+1)%CM;        //2.在队尾插入,计算队尾指针的

Q.data[Q.rear]=x;            //3.设置插入结点的值数值

        printf("in Cycle queue Success!\n");

    }

    return Q;

}

8、队列的删除操作

#include "QueueCycleControl.h"

SECYCLEQUEUE outCycleQueue(SECYCLEQUEUE Q)

{   if(Q.front==Q.rear)

{

printf("Cycle queue is Empty!\n");  //1.判断循环队列是否是空

 }

Else

{

front=(Q.front+1)%CM;

printf("out cycle queue success!\n");

}

return Q;

}

 

9、队列的链存储结构

链存储结构存储的队列称为链队列.队头指针指向链队列的头结点,头结点的指针域若为空,则为空队列;若不为空,则为指向队首结点的指针。
链队列设有一个队头指针,其值指向队列的头结点.也是唯一地标示一个链队.设置一个队尾指针方便插入结点.队头指针和队尾指针都是指针型变量。链队列没有容量的限制,所以在可用的存储空间范围内,一般不会出现上溢问题,也不存在如顺序队列的假溢出问题。

 

10、队列的插入操作

#include "QueueLinkControl.h"#include <stdlib.h>

LINKQUEUE * inLinkQueue(LINKQUEUE *LQ,LDT x)

{

if(LQ==NULL)

{

        LQ=initLinkQueue(LQ);

    }

    LINKNODE  *q; //1.初始化插入的结点

    q=(LINKNODE *)malloc(sizeof(LINKNODE));

    q->data=x;

    q->next=NULL;

    LQ->rear->next=q; //2.插入式从队尾插入,将插入的结点插入队尾

    LQ->rear=q;

    printf("in link queue success!\n");

    return LQ;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值