链队列及其操作

本文详细解析了链表队列实现中的重点,包括如何不断后移rear指针,确保每次入队操作的正确执行。通过实例代码演示,帮助读者深入理解链表队列的工作原理。

问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。

     lqueue->rear要不断的后移***因此,每次入队的时候要找到lqueue->rear,因此每次入队是要后移lqueue->rear。^^

 

代码:

#include <iostream>
#include <cstdlib>
using namespace std;

typedef struct LinkQueue
{
	int data;
	struct LinkQueue *front;
	struct LinkQueue *rear;
}*LQueue;

void initLQueue(LQueue &lqueue)
{
	lqueue=(LQueue)malloc(sizeof(struct LinkQueue));
	if(!lqueue)
	{
		cout<<"allocate fail"<<endl;
		exit(-1);
	}
	else
	{
		lqueue->front=lqueue->rear=NULL;
	}

}

void enQueue(LQueue lqueue,int elem)      //入队
{
	LQueue node,temp;

	node=(LQueue)malloc(sizeof(struct LinkQueue));
	if(!node)
	{
		cout<<"allocate fail"<<endl;
		exit(-1);
	}
	else
	{
		node->data=elem;
		node->front=node->rear=NULL;
		if(lqueue->front==NULL)
		{
			temp=lqueue;
			temp->front=node;
			temp->rear=node;
		}
		else
		{
			temp=lqueue->rear;
			temp->rear=node;
			lqueue->rear=node;
		}
	}
}

int deQueue(LQueue lqueue)
{
	LQueue p;
	int elem;
	if(lqueue->front!=NULL)
	{
		if(lqueue->front->rear!=NULL)
		{
		p=lqueue->front;
		lqueue->front=p->rear;
	    elem=p->data;
		free(p);
		}
		else
		{
			p=lqueue->front;
			elem=p->data;
			lqueue->front=lqueue->rear=NULL;
			free(p);
		}
		return elem;
	}
	return 0;
}

int GetHead(LQueue lqueue)
{
	int elem;
	if(lqueue->front!=NULL)
	{
		elem=lqueue->front->data;
		return elem;
	}
	return 0;
}
int main()
{
	LQueue lqueue;
	int arr[]={9,3,21,11,70,13,8,2,6};
	initLQueue(lqueue);
    
	for(int i=0;i<9;i++)
	{
		enQueue(lqueue,arr[i]);
	}

	cout<<"队头元素是 "<<GetHead(lqueue)<<endl;
	while(lqueue->front!=NULL)
	  {
		cout<<deQueue(lqueue)<<" | ";
	  }
	cout<<endl;
	return 0;
}

  

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值