您的位置:首页 > 其它

顺序存储实现队列 循环队列 好麻烦

2013-08-19 18:51 393 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: