链式队列C语言实现
定义
typedef struct qnode{
DataType data;
struct node *next;
}LQNode;
typedef struct{
LQNode *front;
LQNode *rear;
}LQueue;
初始化
void QueueInitiate(LQueue *Q){
Q->rear=NULL;
Q->front=NULL;
}
判断非空
int QueueNotEmpty(LQueue Q){
if(Q.front==NULL)return 0;
else return 1;
}
入队
void QueueAppend(LQueue *Q,DataType){
LQNode *p;
p=(LQNode *)malloc(sizeof(LQNode));
p->data=x;
p->next=NULL;
if(Q->rear!=NULL)Q->rear->next=p;
Q->rear=p;
if(Q->front==NULL)Q->front=p;
}
出队
int QueueDelete(LQueue *Q,DataType *d){
LQNode *p;
if(Q->front==NULL){
printf("队列已满无法出队!\n");
return 0;
}
else{
*d=Q->front->data;
p=Q->front;
Q->front=Q->front->next;
if(Q->front==NULL)Q->rear=NULL;
free(p);
return 1;
}
}
取队头元素
int QueueGet(LQueue Q,DataType *d){
if(Q.front==NULL){
printf("队列已空无元素可取!\n");
return 0;
}
else{
*d=Q.front->data;
return 1;
}
}
撤销动态申请内存空间
void Destroy(SLNode *head){
LQNode *p,*p1;
p=Q.front;
while(p!=NULL){
p1=p;
p=p->next;
free(p1);
}
}