进队步骤:先让队头队尾都指向一个空结点,然后先创建一个新的内存空间并赋值,再从队尾进队,让队尾的下一个结点的指针域指向这个内存区域。
这样,队头的下一个元素就是第一个进队元素,队尾本身元素的是第n次进队的元素。
队列特点 __队尾进,队头出
链队列的C语言描述:
链队列的结构{
有对头指针和队尾指针;
有元素值data,和后继结点(指针)
}
实现思路:
1_创建一个结构体,内含int data和指向结构体本身的指针;
2_再创建一个结构体,内含两个(1)所说结构体的指针,分别是front和rear
front指针和rear指针的使用:
当front指针和rear指针相等时,队列为空
#include<stdio.h>
//链队列定义
typedef struct que{
int data;
struct que *next;
}Que;
typedef struct {
Que *front,*rear;
}LinkQue;
bool Queempty(LinkQue *lq){
return (lq->front==lq->rear);
}
//初始化这个队列,并把队列的头结点的指针域置NULL
void InQue(LinkQue *lq){
lq->front=lq->rear=(Que*)malloc(sizeof(Que));
lq->front->next=NULL;
}
//取队头元素
bool gethead(LinkQue *lq,Que *&temp){
if(lq->front==lq->rear){
return 0;
}else{
temp=lq->front;
return 1;
}
}
//进队操作
bool enQue(LinkQue *lq,int val){
Que *p=(Que*)malloc(sizeof(Que));
p->next=NULL;
p->data=val;
lq->rear->next=p;
lq->rear=p;
return 1;
}
//出队操作
bool deQue(LinkQue *lq,int val){
if(lq->front==lq->rear){
return 0;
}
val=lq->front->data;
Que *p;
p=lq->front;
lq->front=p->next;
free(p);
}