#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
//用动态数组实现队列 循环队列
#define Ini_size 3
#define Inc_size 1
typedef int elem;
struct newtype
{
elem *data;
int front;
int rear;
int size;
};
typedef struct newtype queue;
queue Initial(queue Q)
{
Q.data=(elem*)malloc(Ini_size*sizeof(elem));
Q.front=0;
Q.size=Ini_size;
Q.rear=Q.size-1;
return Q; /*认定front = rear = 0是空队列*/
}
int Full(queue Q) //在初始长度<3的时候 这个判定是不正确的
{
if((Q.rear+2)%Q.size==Q.front) return 1;
else return 0;
}
int Empty(queue Q)
{
if ((Q.rear+1)%Q.size==Q.front) return 1;
return 0;
}
queue EnQueue(queue Q,elem x)
{
if (Full(Q)) {printf("被调用\n");Q.data=(elem*)realloc(Q.data,(Q.size+Inc_size)*sizeof(elem));Q.size+=Inc_size;}
Q.rear=(Q.rear+1)%Q.size;
Q.data[Q.rear]=x;
return Q;
}
queue DeQueue(queue Q,elem*x)
{
if (Empty(Q))
{
printf("can't dequeue.queue is empty\n");
exit(0);
}
*x=Q.data[Q.front];
Q.front=(Q.front+1)%Q.size;
return Q;
}
void Print(queue Q)
{
int i,len;
if (Empty(Q)) printf("\nempty\n");
else
{
printf("\n");
len = (Q.rear-Q.front+Q.size)%Q.size+1;
for (i=0;i<len;i++)
printf("%d\t",Q.data[(Q.front+i)%Q.size]);
}
printf("\n");
}
#endif // QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
//用动态数组实现队列 循环队列
#define Ini_size 3
#define Inc_size 1
typedef int elem;
struct newtype
{
elem *data;
int front;
int rear;
int size;
};
typedef struct newtype queue;
queue Initial(queue Q)
{
Q.data=(elem*)malloc(Ini_size*sizeof(elem));
Q.front=0;
Q.size=Ini_size;
Q.rear=Q.size-1;
return Q; /*认定front = rear = 0是空队列*/
}
int Full(queue Q) //在初始长度<3的时候 这个判定是不正确的
{
if((Q.rear+2)%Q.size==Q.front) return 1;
else return 0;
}
int Empty(queue Q)
{
if ((Q.rear+1)%Q.size==Q.front) return 1;
return 0;
}
queue EnQueue(queue Q,elem x)
{
if (Full(Q)) {printf("被调用\n");Q.data=(elem*)realloc(Q.data,(Q.size+Inc_size)*sizeof(elem));Q.size+=Inc_size;}
Q.rear=(Q.rear+1)%Q.size;
Q.data[Q.rear]=x;
return Q;
}
queue DeQueue(queue Q,elem*x)
{
if (Empty(Q))
{
printf("can't dequeue.queue is empty\n");
exit(0);
}
*x=Q.data[Q.front];
Q.front=(Q.front+1)%Q.size;
return Q;
}
void Print(queue Q)
{
int i,len;
if (Empty(Q)) printf("\nempty\n");
else
{
printf("\n");
len = (Q.rear-Q.front+Q.size)%Q.size+1;
for (i=0;i<len;i++)
printf("%d\t",Q.data[(Q.front+i)%Q.size]);
}
printf("\n");
}
#endif // QUEUE_H_INCLUDED