struct Node // 数据节点
{
int data; // 数据类型
Node *next; // 指向下一个节点的指针
};
struct CycleQueue // 循环链表队列
{
int size_; // 目前队列元素个数
Node *rear; // 尾指针
};
void creatCycleQueue(CycleQueue* que)
// 创建一个循环队列指针que
{
que->size_ = 0;
que->rear = NULL;
}
bool isEmpty(CycleQueue* que)
// 判断队列que是否为空
// 若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!
// 否则返回 false
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(que->size_==0)
{
printf("The queue is Empty\n");
return true;
}
else
return false;
/********** End **********/
}
void enQueue(CycleQueue* que, int item)
// 实现入队操作:将元素item加入队列que尾部
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
Node *p=(Node*)malloc(sizeof(Node));//申请一个新结点
if(!p)//申请不成功
exit(0);
p->data=item;
if(que->size_==0)//队列为空
{
que->rear=p;
que->rear->next=p;
}
else
{
p->next=que->rear->next;
que->rear->next=p;
que->rear=p;
}
que->size_++;
/********** End **********/
}
int deQueue(CycleQueue* que)
// 实现出队操作:移除队列que首部元素,并返回元素值
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(que->size_==0)//链队为空
exit(0);
Node *p=que->rear->next;//node为首结点
int e=p->data;
que->rear->next=p->next;
free(p);
que->size_--;
return e;
/********** End **********/
}
void printQueue(CycleQueue* que)
// 打印队列
{
while (isEmpty(que)==false) {
int item = deQueue(que);
printf("%d ", item);
}
}
只有尾指针的循环链队的插入与删除(算法)
最新推荐文章于 2024-05-12 19:01:24 发布