队列 / 列队 Queue
//二叉树
typedef struct Tree{
int val;
Tree *left;
Tree *right;
//Tree(int v):val(v){}
}*P_Tree;
//队列
typedef P_Tree Elem; //以二叉树作为列队结点元素
struct Node{
Elem Data;
struct Node *Next; //下一个进来的结点
};
struct QNode{
struct Node *rear; //列队尾(push)
struct Node *front; //列队头(pop)
};
typedef struct QNode* Queue;
Queue createQueue(){
Queue queue=(Queue)malloc(sizeof(QNode));
queue->rear=NULL;
queue->front=NULL;
return queue;
}
int isEmpty(Queue Q){
//如果队列不为空,则其对头和对尾会指向某个结点
return (Q->front == NULL);
}
//对尾(rear)push
void push(Elem item,Queue queue){
Node *next;
next=(Node*)malloc(sizeof(Node));
next->Data=item;
next->Next=NULL;
if(isEmpty(queue)){
queue->front=next;
queue->rear=next;
}else{
queue->rear->Next=next;
queue->rear=next;
}
}
//队头(front)pop
Elem pop(Queue queue){
struct Node *node;
Elem item;
if(isEmpty(queue)){
cout << "队列空" << endl;
return NULL;
}
node=queue->front;
if(queue->front == queue->rear){
queue->front=NULL;
queue->rear=NULL;
}else{
queue->front=queue->front->Next;
}
item=node->Data;
free(node);
return item;
}