队列:只允许一端删除,一端插入(先进先出)
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
struct quece
{
int front; //队头指针出栈
int rear; //队尾指针入栈
int quece[MAX];
};
typedef struct quece Quece1;
typedef struct quece* Quece2;
enum is_quece{FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO};
void create_quece(Quece2 *quece)
{
*quece = (Quece2)malloc(sizeof(Quece1));
if(*quece == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
void init_quece(Quece2 quece)
{
quece -> front = -1;
quece -> rear = -1;
}
int is_empty(Quece2 quece)
{
if(quece -> front >= quece -> rear) //如果队头指针在队尾指针后面说明为空
{
printf("empty!\n");
return EMPTY_OK;
}
return EMPTY_NO;
}
int is_full(Quece2 quece)
{
if(quece -> front == -1)
{
if(quece -> rear == MAX -1)
{
printf("quece full3!\n");
return FULL_OK;
}
}
else if(quece -> rear - quece -> front + 1 == MAX)
return FULL_OK;
return FULL_NO;
}
int push_quece(Quece2 quece,int num)
{
int i;
if(is_full(quece) == FULL_OK)
{
printf("full quece!\n");
return;
}
else if(quece -> rear < MAX -1)
{
quece -> rear ++;
quece -> quece[quece -> rear] = num;
}
else
{
for(i = quece -> front;i < quece -> rear;i++)
{
quece -> quece[i - quece -> front] = quece -> quece[i];
}
quece -> rear = quece -> rear - quece -> front + 1; //已经存入的数的个数
quece -> front = 0; //队头指针置0,再存入
quece -> rear ++;
quece -> quece[quece -> rear] = num; //在存入数之后接着存入
}
}
int pop_quece(Quece2 quece)
{
if(is_empty(quece) == EMPTY_OK)
{
printf("empty4\n");
return;
}
return quece -> quece[++ quece -> front];
}
int main()
{
int i;
Quece2 quece;
create_quece(&quece);
init_quece(quece);
for(i = 0;i < MAX;i++)
{
push_quece(quece,i + 1);
}
printf("----------------\n");
for(i = 0;i < MAX;i++)
{
printf("num = %d\n",pop_quece(quece));
}
}