【数据结构】链队(队列的链式存储)

队列的链式存储,需要首先设计结点,包含一个指针域和一个数据域。然后对于一个队列整体,设计出一个队首指针和一个队尾指针。队首指针指向队列的第一个元素。
存储类型就可以描述为:

typedef struct LinkNode{
	ElemType data;
	struct LinkNode *next;
}LinkNode;
typedef struct{
	LinkNode *front;
	LinkNode *rear;
}LinkQueue;

整体设计如下:

#include 
#include 
#include 
using namespace std;

typedef int ElemType;
typedef struct LinkNode{
	ElemType data;
	struct LinkNode *next;
}LinkNode;
typedef struct{
	LinkNode *front;
	LinkNode *rear;
}LinkQueue;

void InitQueue(LinkQueue &Q);			//构造一个链式队列 
bool QueueEmpty(LinkQueue &Q);			//判断链队是否为空 
void EnQueue(LinkQueue &Q,ElemType &x);	//链队队尾插入元素 
bool DeQueue(LinkQueue &Q,ElemType &x);	//链队删除队首元素 

int main()
{
	
	return 0;
}
void InitQueue(LinkQueue &Q){			 
	Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
	Q.front->next=NULL;			//队首指针与队尾指针指向同一位置
}

bool QueueEmpty(LinkQueue &Q){		//判断队空 
	if(Q.front==Q.rear)
		return true;
	else
		return false; 
}

void EnQueue(LinkQueue &Q,ElemType &x){
	LinkNode *p;
	p=new LinkNode;					//入队时声明一个p指针,插到队尾 
	p->data=x;
	p->next=NULL;
	Q.rear->next=p;					//插到队尾处 
	Q.rear=p;
}

bool DeQueue(LinkQueue &Q,ElemType &x){
	if(Q.front==Q.rear)
		return false;
	LinkNode *p;
	p=Q.front->next;
	x=p->data;
	Q.front->next=p->next;
	if(Q.rear==p)					//若原队列只有一个元素的时候 
		Q.rear=Q.rear;				//删除后变为空 
	free(p);
	return true;
}

你可能感兴趣的:(链队,数据结构,数据结构)