linkqueue.h文件
typedef int datatype;
typedef struct node{
datatype data;
struct node * next;
}listnode ,*linklist;
typedef struct{
linklist front;
linklist rear;
}linkqueue;
linkqueue * queue_create();
int enqueue(linkqueue *lq,datatype value);
datatype dequeue(linkqueue *lq);
int queue_empty(linkqueue *lq);
int queue_clear(linkqueue *lq);
linkqueue* queue_free(linkqueue *lq);
linkqueue.c
#include<stdio.h>
#include<stdlib.h>
#include"linkqueue.h"
linkqueue * queue_create(){
linkqueue *lq;
if((lq=(linkqueue *)malloc(sizeof(linkqueue)))==NULL){
printf("malloc failed\n");
return NULL;
}
lq->front=lq->rear=(linklist)malloc(sizeof(listnode));
lq->front->data=0;
lq->front->next=NULL;
return lq;
}
int enqueue(linkqueue *lq,datatype value){
linklist p;
if(lq==NULL){
printf("lq is null\n");
return -1;
}
p=(linklist)malloc(sizeof(listnode));
if(p==NULL){
printf("p malloc failed\n");
return -1;
}
p->data=value;
p->next=NULL;
lq->rear->next=p;
lq->rear=p;
return 0;
}
datatype dequeue(linkqueue *lq){
linklist p;
p=lq->front;
lq->front=p->next;
free(p);
p=NULL;
return lq->front->data;
}
int queue_empty(linkqueue *lq){
return (lq->front==lq->rear ? 1:0);
}
int queue_clear(linkqueue *lq){
return 0;
}
linkqueue* queue_free(linkqueue *lq){
linklist p;
if(lq==NULL){
printf("lq is null\n");
return NULL;
}
while(lq->front){
p=lq->front;
lq->front=p->next;
printf("frre:%d",p->data);
free(p);
}
free(lq);
lq=NULL;
return NULL;
}
test.c文件
#include<stdio.h>
#include"linkqueue.h"
int main(){
linkqueue * lq;
lq=queue_create();
if(lq==NULL){
return -1;
}
enqueue(lq,10);
enqueue(lq,20);
enqueue(lq,30);
enqueue(lq,40);
while(!queue_empty(lq)){
printf("dequeue:%d\n",dequeue(lq));
}
lq= queue_free(lq);
enqueue(lq,40);
return 0;
}