c++队列

队列

队列的链式存储结构其实就是简单的链表,只是添加了队头和队尾指针。限制了添加和删除只能从队尾和队头操作。

代码实现

#include 
using namespace std;

// 结点
typedef struct QNode
{
	int data;
	struct QNode *next;
}QNode, *QueuePtr;


// 链表结构
typedef struct
{
	QueuePtr front, rear;	// 队头,队尾指针
}LinkQueue;


// 创建队列
void CreateQueue(LinkQueue *Q, int n)
{
	QueuePtr q = new QNode();	// 创建头结点 
	Q->front = Q->rear = q;		// 并令队头队尾指针指向头结点

	QueuePtr p;

	for (int i = 0; i < n; i++)
	{
		p = new QNode();
		p->data = i;
		p->next = NULL;

		Q->rear->next = p;
		Q->rear = p;

		// EnQueue(&p, i);
	}

}


// 队尾添加元素
void EnQueue(LinkQueue *Q, int data)
{
	QueuePtr s = new QNode();
	s->data = data;
	s->next = NULL;

	Q->rear->next = s;	//将新节点入队
	Q->rear = s;	//队尾指向新结点
}


// 队头删除元素
void DeQueue(LinkQueue *Q, int *data)
{
	QueuePtr p;
	if (Q->front == Q->rear)
	{
		cout << "Queue is empty" << endl;
	}

	p = Q->front->next;		// 获取删除节点
	Q->front->next = p->next;	// 连接新队列
	*data = p->data;

	if (Q->rear == p)		// 如果队头是队尾,则将rear指向头结点
	{
		Q->rear = Q->front;
	}

	delete(p);
}


void PrintQueue(LinkQueue *Q)
{
	QueuePtr p;
	p = Q->front->next;

	if (!p) cout << "Queue is empty" << endl;

	while (p)
	{
		cout << p->data<<endl;
		p = p->next;
	}
}

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