链队列及其操作

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

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

  

运行结果:

原文地址:https://www.cnblogs.com/xshang/p/3035615.html