链队列LinkQueue

0、节点结构体定义

typedef struct QNode{
	int data;
	struct QNode *next;
} QNode, *Qptr;


typedef struct{
	QNode *front;
	QNode *rear;
} LinkQueue;

1、初始化

void InitQueue(LinkQueue &Q)
{
	Q.front = Q.rear = new QNode;
	Q.front->next = NULL;
}

2、入队

void EnQueue(LinkQueue &Q, int e)
{
	Qptr s = new QNode;
	s->data = e;
	s->next = NULL;
	
	Q.rear->next = s;
	Q.rear = s;		//尾指针后移 
}

3、出队

bool DeQueue(LinkQueue &Q, int &e)
{
	if(Q.front == Q.rear){
		return false;
	}
	Qptr p = Q.front->next;
	e = p->data;
	
	Q.front->next = p->next;
	if(Q.rear == p){		//队列中只有一个元素,删除后让尾指针指向头指针 
		Q.rear =Q.front;
	}
	delete p;
	
	return true;	
}

4、取队头

int GetHead(LinkQueue Q)
{
	if(Q.front != Q.rear){
		return Q.front->next->data;
	}else{
		return -1;
	}
}

5、释放内存

void QueueRelese(LinkQueue &Q)
{
	int e;
	while(DeQueue(Q, e)){
	}
}

你可能感兴趣的:(数据结构,算法,c++)