学个二叉树,又要用上队列的代码,上学期学的队列忘光光了,这不没办法回来复习咯
代码:
#include <stdio.h>
#include <stdlib.h>typedef int ElemType;
typedef struct LinkNode{ElemType data;struct LinkNode *next;
}LinkNode;
typedef struct{LinkNode *front,*rear; // 链表头,链表尾,也可以称队头,队尾
}LinkQueue; //先进先出//队列的初始化,使用的是带头结点的链表来实现的
void InitQueue(LinkQueue &Q)
{Q.front=Q.rear= (LinkNode *)malloc(sizeof(LinkNode));Q.front->next=NULL;
}
//入队
void EnQueue(LinkQueue &Q,ElemType x)
{LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));s->data=x;s->next=NULL;Q.rear->next=s; //rear始终指向尾部Q.rear=s;
}
//出队 头部删除法
bool DeQueue(LinkQueue &Q,ElemType &x)
{if(Q.front==Q.rear)return false; //队列为空LinkNode *q=Q.front->next; //头结点什么都没存,所以头结点的下一个结点才有数据if(Q.rear==q){x=q->data;Q.rear=Q.front; //如果只有一个结点}else{x=q->data;Q.front->next=q->next; //断链}free(q);return true;
}
//通过链表来实现队列
int main()
{LinkQueue Q;//入队InitQueue(Q); //初始化队列EnQueue(Q,3);EnQueue(Q,4);EnQueue(Q,5);EnQueue(Q,6);EnQueue(Q,7);//出队ElemType element; //存储出队元素bool ret;ret= DeQueue(Q,element);if(ret)printf("DeQueue success,element=%d\n",element);elseprintf("Dequeue fail\n");return 0;
}
运行:
DeQueue success,element=3