//------------------------------------------------------------------------------
// 队列 即比单链表多了头尾标志而已,本质还是单链表
//------------------------------------------------------------------------------
#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<