FIFO队列 ADT接口 链表实现
程序员文章站
2022-03-14 15:05:09
...
FIFO.h (接口)
#include "Item.h"
void QUEUinit(int);
int QUEUempty(void);
void QUEUput(Item);
Item QUEUget(void);
Item.h (自定义类型)
typedef char Item;
FIFO.c (接口实现)
#include "FIFO.h"
#include <stdlib.h>
typedef struct STACKnode *link;
struct STACKnode
{
Item item;
link next;
};
static link head,tail;
static int N=1,N1;
static int STACKerror(int i)
{
if(i)
return N<N1?1:0;
else
return N>0 ?1:0;
}
link NEW(Item item, link next)
{
link x = malloc(sizeof *x);
x->item=item; x->next=next;
return x;
}
void QUEUinit(int maxN)
{
N1=maxN;
head=NULL;
}
int QUEUempty(void)
{
return N;
}
void QUEUput(Item item)
{
if(head==NULL)
{
head=(tail=NEW(item, head));
return ;
}
tail->next=NEW(item, tail->next);
tail=tail->next;
N++;
}
Item QUEUget(void)
{
if(STACKerror(0))
{
Item item=head->item;
link t=head->next;
free(head);head=t;
N--;
return item;
}
else
printf("\nSTACKpop false");
return NULL;
}
main.c (主程序)
#include <stdio.h>
#include "FIFO.h"
int main(void)
{
int N;
Item str[11];
scanf("%s", str);
getchar();
N=sizeof(str)/sizeof(str[0]);
printf("%d\n",N);
QUEUinit(N);
for(int i=0; i<N; i++)
{
QUEUput(str[i]);
}
for(int i=0; i<N; i++)
{
printf("%c",QUEUget());
}
return 0;
}