队列操作

2014-11-23 22:25:58 ? 作者: ? 浏览: 3
//------------------------------------------------------------------------------
// 队列 即比单链表多了头尾标志而已,本质还是单链表
//------------------------------------------------------------------------------
#include 
using namespace std;

typedef struct Node
{
	int   data;
	Node* next;
} Node, *LPNode;

typedef struct Queue
{
	Node* first;			// 头
	Node* rear;				// 尾
}Queue, *LPQueue;


//******************************************************************************
// Name: CreateQueue
// Desc: 创建队列
//******************************************************************************
Queue* CreateQueue()
{
	// 创建并返回一个空的队列
	Queue* tempQueue = new Queue;
	tempQueue->first = NULL;
	tempQueue->rear  = NULL;
	return tempQueue;
}

//******************************************************************************
// Name: Insert
// Desc: 入队
//******************************************************************************
Queue* Insert(Queue* que, int data)
{
	// 队里为空,不能进行入队操作
	if(que == NULL)
	{
		return  NULL;
	}

	// 先创建一个节点
	Node* newNode = new Node;
	newNode->data = data;
	newNode->next = NULL;

	// 因为队列的特点是先进先出,所以入队的时候,插入的位置在最后
	if(que->first == NULL)
	{
		//----------------------------------------------------------------------
		// 头和尾公用一块地址,所以后面插入的时候,队首也将会自动设置next
		//----------------------------------------------------------------------
		que->first = newNode;					// 队首
		que->rear  = newNode;
	}
	else
	{
		que->rear->next = newNode;
		que->rear = newNode;					// 队尾
	}

	// 返回队列
	return que;

}

//******************************************************************************
// Name: OutOfQueue
// Desc: 出队列, 返回队首元素使用一维指针,因为已经是指针的指针,能改变内容
//******************************************************************************
Node* OutOfQueue1(Queue* que)
{
	if(que == NULL)
	{
		cout<<"队列为空"<first;
	que->first = que->first->next;

	return outNode;							// 返回出队列的元素
}


//******************************************************************************
// Name: OutOfQueue
// Desc: 出队列, 返回队首元素,改变了队列的指针,使用二维指针
//******************************************************************************
Node* OutOfQueue2(Queue** que)
{
	if(*que == NULL)
	{
		cout<<"队列为空"<first;
	(*que)->first = (*que)->first->next;

	return outNode;							// 返回出队列的元素
}


//******************************************************************************
// Name: PrintQueue
// Desc: 打印队列
//******************************************************************************
void PrintQueue(Queue* que)
{
	/*			改变指针的指针,改变了堆内存的东西,不想单双链表那样
	Queue* tempQue = que;
	while(tempQue->first != NULL)			
	{
		cout<first->data<<" ";
		tempQue->first = tempQue->first->next;
	}
	cout<first;
	while(tempNode != NULL)
	{
		cout<data<<" ";
		tempNode = tempNode->next;
	}
	cout<first;
	while(tempNode != NULL)
	{
		++currentLength;
		tempNode = tempNode->next;
	}

	return currentLength;

}


int main()
{
	// 创建队列
	Queue* que = CreateQueue();
	cout<<"创建队列成功,输入几组要入队的元素"<>insertElem)
	{
		que = Insert(que, insertElem);
	}

	// 打印
	cout<<"打印队列:"<data< 
 

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: