一、链式队列的实现和操作
函数声明与结构体定义
#ifndef __QUEUE__
#define __QUEUE__
typedef int datatype;
typedef struct node{
union{
datatype text;
int len;
}data;
struct node* next;
}Linkequeue;
typedef struct{
Linkequeue* last;
Linkequeue* first;
}Lq_lf;
Lq_lf* creat_linkequeue();
void insert_linkequeue(Lq_lf* lf,datatype data);
datatype output_linkequeue(Lq_lf* lf);
void show_linkequeue(Lq_lf* lf);
#endif
方法实现
#include <stdio.h>
#include "linkequeue.h"
#include <stdlib.h>
/*
* function:创建
* @param [ in]
* @param [out]
* @return
*/
Lq_lf* creat_linkequeue(){
Linkequeue* lq = (Linkequeue*)malloc(sizeof(Linkequeue));
if(NULL == lq){
printf("创建失败\n");
return NULL;
}
lq->data.len = 0;
lq->next = NULL;
Lq_lf* lf = (Lq_lf*)malloc(sizeof(Lq_lf));
lf->last = lq;
lf->first = lq;
}
/*
* function:入队
* @param [ in]
* @param [out]
* @return
*/
void insert_linkequeue(Lq_lf* lf,datatype data){
Linkequeue* lq = (Linkequeue*)malloc(sizeof(Linkequeue));
if(NULL == lq){
printf("入队失败\n");
return ;
}
lq->data.text = data;
lq->next = NULL;
lf->last->next= lq;
lf->last = lf->last->next;
lf->first->data.len++;
return;
}
/*
* function:出队
* @param [ in]
* @param [out]
* @return
*/
datatype output_linkequeue(Lq_lf* lf){
if(lf->last->next == lf->first->next){
printf("队列为空\n");
return -1;
}
Linkequeue* head = lf->first->next->next;
Linkequeue* l = lf->first->next;
datatype data = lf->first->next->data.text;
lf->first->next = head;
free(l);
lf->first->data.len--;
return data;
}
/*
* function:遍历队列
* @param [ in]
* @param [out]
* @return
*/
void show_linkequeue(Lq_lf* lf){
Linkequeue* lq = lf->first;
while(lq->next != NULL){
lq = lq->next;
printf("%d\t",lq->data.text);
}
printf("\n");
}