代码分为4部分test.c list.c head.h Makefile
list.c
#include"head.h"
//创建一个空的队列
linkqueue squeue_create()
{
linkqueue L;
L=(linkqueue)malloc(sizeof(Lnode));
if(L==NULL)
{
printf("L apply is failed\n");
return NULL;
}
L->front=(squeue)malloc(sizeof(queues));
if(L->front==NULL)
{
printf("front apply is failed\n");
return NULL;
}
L->back=(squeue)malloc(sizeof(queues));
if(L->back==NULL)
{
printf("back apply is failed\n:");
return NULL;
}
L->front->next=NULL;
L->back=L->front;
return L;
}
//入队列先进先出,所以使用是头插法
int squeue_push(linkqueue L, int value)
{
squeue p;
p=(squeue)malloc(sizeof(queues));//申请结点
if(p==NULL)
{
printf("p is a fail\n");
return 1;
}
p->date=value;
while(L->back->next!=NULL)
{
L->back=L->back->next;
}
L->back->next=p;
p->next=NULL;
return 0;
}
//出队列 先进先出使用老办法会使得的最后的指针的变成野指针
int squeue_pop(linkqueue L)
{
squeue p,s;
int value;
//判断队列是否为空
if(squeue_empty(L))
{
printf("squeue is emtpy\n");
return 1;
}
p=L->front;//保存首地址
s=L->front->next;
value=s->date;
free(p);
p=NULL;
return value;
}
int squeue_empty(linkqueue L)
{
return L->front==L->back?1:0;
}
void squeue_show(linkqueue L)
{
squeue p;
for(p=L->front->next;p!=NULL;p=p->next)
{
printf("%d ",p->date);
}
printf("\n");
}
head.h
#ifndef __HEAD_H
#define __HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct queue{
int date;
struct queue *next;
}queues,*squeue;
typedef struct node{
struct queue * front;
struct queue * back;
}Lnode,*linkqueue;
linkqueue squeue_create();
int squeue_push(linkqueue L,int value);
int squeue_pop(linkqueue L);
int squeue_empty(linkqueue L);
void squeue_show(linkqueue L);
#endif
test.c
#include"head.h"
int main(int argc,char *argv[])
{
linkqueue L;
int value;
L=squeue_create();
if(L==NULL)
{
printf("apply is fail\n");
return 1;
}
squeue_push(L,10);
squeue_push(L,20);
squeue_push(L,30);
squeue_push(L,40);
squeue_push(L,50);
value=squeue_pop(L);
printf("%d\n",value);
squeue_show(L);
return 0;
}
Makefile
CC=gcc
CFLAGS=-c -O -Wall
obj=list.o test.o
yuxiang:$(obj)
$(CC) -o $@ $^
%*.o:%*.c
$(CC) $(CFLAGS) -o $@ $<
.PHONY:clean
clean:
rm -rf *.o yuxiang