只有尾指针的循环链队的插入与删除(算法)

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值