预习《大话数据结构》队列

一、队列有什么特点?

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FIFO)的线性表,允许插入的一端为队尾,允许删除了一端为队头。

二、循环队列有什么优点?

解决假溢出的办法就是后面满了,就再从头开始,也就是头尾相接的循环,队列的这种头尾相接的顺序存储结构为循环队列。

三、如何判断循环队列是满还是空?

方法一是设置一个标志变量flag,当front = rear且flag = 0时为队列空,当front = rear且flag = 1时为队列满。

方法二是当队列为空时,条件就是front = rear,当队列满时,修改条件,保留一个元素的空间,那么队列满的条件是(rear + 1)%QueueSize == front。

四、如何计算队列长度?

当rear > front时,队列长度为rear - front;当rear < front时,队列长度为rear - front + QueueSize;通用的计算队列长度的公式为(rear - front + QueueSize)%QueueSize

五、如何定义循环队列的顺序存储结构体?

typedef int QElemType;

typedef struct

{

 QElemType data[MAXSIZE];

int front; //头指针

int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置

}SqQueue;

六、如何定义一个链队列的结构体?

typedef int QElemType;

typedef struct QNode //结点结构

{

 QElemType data;

struct QNode *next;

}QNode, *QueuePtr;

typedef struct //队列链表结构

{

 QueuePtr front, rear;

}LinkQueue;

七、链队列如何实现入队列?

Status EnQueue(LinkQueue *Q, QElemType e)

{

 QueuePtr s = (QueuePtr)malloc(sizeof(QNode));

if (!s)

exit(OVERFLOW);

s->data = e;

s->next = NULL;

Q->rear->next = s;

Q->rear = s;

return OK;

}

八、链队列如何实现出队列?

Status DeQueue(LinkQueue *Q, QElemType *e)

{

 QueuePtr p;

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;

}

九、循环队列和链队列有什么区别?

它们的基本操作都是常数时间,即都为O(1);循环队列事先申请好空间,试用期间不释放,

链队列每次申请和释放结点也会存在时间开销;循环队列必须有一个固定长度,所以就有了存储元素和空间浪费的问题,

链队列不存在这个问题,更加灵活。

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值