假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针

来源:百度知道 编辑:UC知道 时间:2024/06/18 12:34:26
void InitCiQueue(CiQueue &Q)//初始化循环链表表示的队列Q
{
Q=(CiLNode*)malloc(sizeof(CiLNode));
Q->next=Q;
}//InitCiQueue

void EnCiQueue(CiQueue &Q,int x)//把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队头元素
{
p=(CiLNode*)malloc(sizeof(CiLNode));
p->data=x;
p->next=Q->next; //直接把p加在Q的后面
Q->next=p;
Q=p; //修改尾指针
}

Status DeCiQueue(CiQueue &Q,int x)//从循环链表表示的队列Q头部删除元素x
{
if(Q==Q->next) return INFEASIBLE; //队列已空
p=Q->next->next;
x=p->data;
Q->next->next=p->next;
free(p);
return OK;
}//DeCiQueue

上面分别是初始化,入队列和出队列的算法。
请问Q=(CiLNode*)malloc(sizeof(CiLNode));是什么意思。
如何表示循环链表队列已经满的情况呢?
Q==Q->next是空的情况

Q=(CiLNode*)malloc(sizeof(CiLNode));
malloc是申请内存空间的函数 CiLNode是函数返回的指针类型 sizeof(x)是指x的大小(长度),此句的意思是向内存申请一个CiLNode大小的空间,其类型是CiLNode,指向这个位置的指针是Q,如果分配失败,则Q=NULL
链表表示队列会满吗?新加入元素都会申请内存空间,除非内存不足,申请失败