顺序存储:
struct.h
#ifndef _STRUCT_H
#define _STRUCT_H
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define SIZE 10
typedef struct infonode{
int a[SIZE];
int prev;
int next;
}info, *pinfo;
void init(pinfo *p);
void add(pinfo p, int num);
int out(pinfo p);
bool is_full(pinfo p);
bool is_empty(pinfo p);
void show(pinfo p);
#endif
func.c
#include"struct.h"
//初始化
void init(pinfo *p)
{
(*p) = (pinfo)malloc(sizeof(info));
if(*p == NULL)
{
perror("init malloc failed");
exit(1);
}
(*p)->prev = SIZE - 1;
(*p)->next = SIZE - 1;
}
//入队
void add(pinfo p, int num)
{
if(is_full(p))
{
printf("the queue is full\n");
return;
}
p->prev = (p->prev+1)%SIZE;
p->a[p->prev] = num;
}
//出队
int out(pinfo p)
{
int data;
if(is_empty(p))
{
printf("the queue is empty\n");
return 0;
}
p->next = (p->next+1)%SIZE;
data = p->a[p->next];
return data;
}
//判满
bool is_full(pinfo p)
{
if(p->next == (p->prev+1)%SIZE)
return true;
else
return false;
}
//判空
bool is_empty(pinfo p)
{
if(p->next == p->prev)
return true;
else
return false;
}
//遍历
void show(pinfo p)
{
int i = p->next, j = p->prev;
if(is_empty(p))
{
printf("not any data in the queue\n");
return ;
}
while(i != j)
{
i = (i+1)%SIZE;
printf("%d ",p->a[i]);
}
printf("\n");
}
main.c
#include"struct.h"
int main(void)
{
int i;
pinfo p;
init(&p);
int a[4] = {123,4234,254,23};
for(i = 0; i < 4; i++)
add(p, a[i]);
printf("the first add: ");
show(p);
printf("the first data = %d\n", out(p));
printf("after the first out :");
show(p);
return 0;
}