数据结构—队列queue

队列:

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列是有序集合,新添加的一端为队尾,另一端为队头,当一个元素从队尾进入队列时,一直向队首移动,直到它成为移除的元素为止。这种排序是先进先出FIFO,生活中常见的例子就是去学校食堂打饭,人多时候需要排队,排队在前面的同学先打饭,新来的同学在后面排队,知道前面同学都打完饭,才轮到它。

1、队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
2、与栈相反,队列是一种先进先出的线性表.
3、实现一个队列同样需要顺序表或链表作为基础。

代码实现:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"

using namespace std;

typedef int DATATYPE;

typedef struct Node
{
	DATATYPE data;
	Node *next;
}QueueNode;

typedef struct Queue
{
	QueueNode* head;
	QueueNode* tail;
}LinkQueue;

LinkQueue* creatQueue()
{
	LinkQueue *temp = new LinkQueue;
	if (NULL == temp)
	{
		perror("creat Queue");
		return NULL;
	}

	temp->head = NULL;
	temp->tail = NULL;
	return temp;
}

//进队,只能从队尾进
int enterQueue(LinkQueue *mqueue,DATATYPE *data)
{
	QueueNode *newnode = new QueueNode;
	if (NULL == newnode)
	{
		perror("enterQueue new node");
		return 1;
	}

	newnode->data = *data;
	newnode->next = NULL;

	if (NULL == mqueue->tail)  //判断queue是否为空
	{
		mqueue->head = newnode;
		mqueue->tail = newnode;   
	}
	else
	{
		mqueue->tail->next = newnode;
		mqueue->tail = newnode;			//更新队尾
	}

	return 0;
}

//出队列,只能从队头出
int quitQueue(LinkQueue *mqueue, DATATYPE *data)
{
	QueueNode *temp = mqueue->head;
	if (NULL != temp)
	{
		mqueue->head = mqueue->head->next;		//更新队头
		memcpy(data, &temp->data, sizeof(DATATYPE));
		delete temp;
		return 0;
	}
	else
	{
		return 1;
	}
}

//销毁队列
int destroyQueue(LinkQueue *mqueue)
{
	while (1)
	{
		int ret = quitQueue(mqueue, NULL);	 //将队列里的元素全部释放
		if (1 == ret)
		{
			break;
		}
	}
	delete mqueue;
	return 0;
}

int main()
{
	LinkQueue *m_queue = creatQueue();
	int array[5] = { 1,2,3,4,5 };
	int i = 0;
	DATATYPE data;

	for (i = 0; i < 5;++i)
	{
		enterQueue(m_queue, &array[i]);
	}

	while (1)
	{
		int ret = quitQueue(m_queue, &data);
		if (0 == ret)
		{
			cout << data << endl;
		}
		else
		{
			break;
		}
	}

	system("pause");	
	return 0;
}	
发布了36 篇原创文章 · 获赞 6 · 访问量 2028

猜你喜欢

转载自blog.csdn.net/the_sea1/article/details/102793659