今天做BFS的时候才发现队列这一块其实掌握的还不到位,所以决定在这里把它总结下,这里说的是队列的链表实现。
队列的特点:
1,先进先出,后进后出
2,用链表实现时,有两个指针,一个头指针,一个尾指针,分别指向头部和尾部。
3,每一个数据块是链表的块,分为数据存储的部分和下一个连接的指针存储next域。
下面按照课本上的写法再自己写一下并简单写下一些基本的算法。
1,数据块的表示
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*Queuepre;
2,分配连个指针去指导
typedef struct {
Queuepre front;
Queuepre rear;
}LinkQueue;
3,初始化
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(Queuepre)malloc(sizeof(QNode));
Q.front->next=NULL;
}
4.入队列
void EnQueue(LinkQueue &Q,int e){
p=(Queuepre)malloc(sizeof(QNode));
p->data=e;
Q.rear->next=p;
Q.rear=p;
}
5,出队列
void DeQueue(LinkQueue &Q,&e){
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(p=Q.rear)Q.rear=Q.front;
free(p);
}