link_queue.c 函数的定义
#include"link_queue.h"
int create_queue(queue_t **my_queue){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
*my_queue=(queue_t *)malloc(sizeof(queue_t));
if(NULL==*my_queue){
printf("内存分配失败,请检查..\n");
return -1;
}
memset(*my_queue, 0, sizeof(queue_t));
return 0;
}
int is_empty(queue_t *my_queue){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
if(NULL==my_queue->front&&NULL==my_queue->rear){
printf("队列为空,无法删除..\n");
return -1;
}else{
return 0;
}
}
int push_queue(queue_t *my_queue, int data){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
node_t *pnew=(node_t *)malloc(sizeof(node_t));
if(NULL==pnew){
printf("内存分配失败,请检查..\n");
return -1;
}
pnew->data=data;
if(NULL==my_queue->front&&NULL==my_queue->rear){
pnew->next=my_queue->rear;
my_queue->rear=pnew;
my_queue->front=pnew;
}else{
my_queue->rear->next=pnew;
my_queue->rear=pnew;
}
return 0;
}
int print_queue(queue_t *my_queue){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
node_t *s=my_queue->front;
while(s!=NULL){
printf("%d ",(s->data));
s=s->next;
}
printf("\n");
}
int pop_queue(queue_t *my_queue, int *data){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
node_t *f=NULL;
if(!is_empty(my_queue)){
f=my_queue->front;
my_queue->front=f->next;
*data=f->data;
free(f);
f=NULL;
if(NULL==my_queue->front){
my_queue->rear=NULL;
}
}else{
printf("无法删除了奥!..\n");
}
return 0;
}
int clean_queue(queue_t *my_queue){
if(NULL==my_queue){
printf("入参为NULL,请检查..\n");
return -1;
}
node_t *f=NULL;
if(!is_empty(my_queue)){
while(my_queue->front!=NULL){
f=my_queue->front;
my_queue->front=f->next;
free(f);
f=NULL;
}
my_queue->rear=NULL;
}else{
printf("无需清空..\n");
return -1;
}
return 0;
}
int destroy_queue(queue_t **my_queue){
if(NULL==my_queue||NULL==(*my_queue)){
printf("入参为NULL,请检查..\n");
return -1;
}
clean_queue(*my_queue);
free(*my_queue);
*my_queue=NULL;
return 0;
}
link_main.c 主函数
#include"link_queue.h"
int main(){
queue_t *my_queue=NULL;
create_queue(&my_queue);
//printf("%p\n",my_queue);
push_queue(my_queue,10);
push_queue(my_queue,20);
push_queue(my_queue,30);
print_queue(my_queue);
int data=0;
pop_queue(my_queue,&data);
printf("出队的元素:%d\n",data);
print_queue(my_queue);
clean_queue(my_queue);
printf("%p \n",my_queue);
destroy_queue(&my_queue);
printf("%p \n",my_queue);
return 0;
}
link_queue.h 包含头文件,函数的声明,结构体的定义
#ifndef __LINK_QUEUE_H__
#define __LINK_QUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//链表节点的结构体
typedef struct _Node{
int data;
struct _Node *next;
}node_t;
//链式队列的结构体
typedef struct _Queue{
struct _Node *front;//头
struct _Node *rear;//尾
}queue_t;
int create_queue(queue_t **my_queue);//
int push_queue(queue_t *my_queue, int data);//
int is_empty(queue_t *my_queue);//
int pop_queue(queue_t *my_queue, int *data);//
int clean_queue(queue_t *my_queue);
int destroy_queue(queue_t **my_queue);
int print_queue(queue_t *my_queue);//
#endif