出队元素最后输出的为啥是地址了?

#define Maxsize 10
typedef struct
{
    int data[Maxsize];
    int front, rear;

}SqQueue;
int InitQueue(SqQueue* Q)//初始化
{
    Q->front = Q->rear = 0;
}
int QueueEmpty(SqQueue Q)//判空
{
    if (Q.rear = Q.front)
        return 1;
    else
        return 0;
}
int EnQueue(SqQueue* Q, int *x)//入队
{
    if ((Q->rear + 1) % Maxsize == Q->front)//判断队满
        return 0;
    Q->data[Q->rear] = x;
    Q->rear = (Q->rear + 1) % Maxsize;//缺陷:浪费一个存储单元
}
int    DeQueue(SqQueue* Q, int *e)//出队
{
    if (Q->front == Q->rear)
        return 0;
    e = Q->data[Q->front];
    Q->front = (Q->front + 1) % Maxsize;
    return e;
}
int main(void)
{
    SqQueue Q;//声明一个队列
    int e;
    InitQueue(&Q);
    int i = Maxsize;
    int j = Maxsize;
    for (;i > 0;i--)
    {
        EnQueue(&Q, &i);
        printf("入队元素为:%d\n", i);
    }
    for (;j > 0;j--)
    {
        DeQueue(&Q, &e);//?????
        printf("出队元素为:%d\n", e);  这里读取出队元素该怎么写呢?
    }

}




img

循环队列开辟10个空间,只能存储9个数据,你试试下面这个代码运行


#include <stdio.h>

#define Maxsize 10
typedef struct
{
    int data[Maxsize];
    int front, rear;
 
}SqQueue;
int InitQueue(SqQueue* Q)//初始化
{
    Q->front = Q->rear = 0;
}
int QueueEmpty(SqQueue Q)//判空
{
    if (Q.rear = Q.front)
        return 1;
    else
        return 0;
}
int EnQueue(SqQueue* Q, int *x)//入队
{
    if ((Q->rear + 1) % Maxsize == Q->front)//判断队满
        return 0;
    Q->data[Q->rear] = *x;
    Q->rear = (Q->rear + 1) % Maxsize;//缺陷:浪费一个存储单元
    return *x;
}
int    DeQueue(SqQueue* Q, int *e)//出队
{
    if (Q->front == Q->rear)
       return 0;
    *e = Q->data[Q->front];
    Q->front = (Q->front + 1) % Maxsize;
    return *e;
}
int main(void)
{
    SqQueue Q;//声明一个队列
    int e;
    InitQueue(&Q);
    int i = Maxsize;
    int j = Maxsize;
    for (;i > 1; i--)
    {
        EnQueue(&Q, &i);
        printf("入队元素为:%d\n", i);
    }
    for (;j > 1;j--)
    {
        DeQueue(&Q, &e);//?????
        printf("出队元素为:%d\n", e);  //这里读取出队元素该怎么写呢?
    }
 
}

修改如下,问题见注释,供参考:

#include<stdio.h>
#define Maxsize 10
typedef struct
{
    int data[Maxsize];
    int front, rear;
}SqQueue;
int InitQueue(SqQueue* Q)   //初始化
{
    Q->front = Q->rear = 0;
}
int QueueEmpty(SqQueue Q)   //判空
{
    if (Q.rear == Q.front)  //if (Q.rear = Q.front)
        return 1;
    else
        return 0;
}
int EnQueue(SqQueue* Q, int *x)//入队
{
                               //if ((Q->rear + 1) % Maxsize == Q->front)//判断队满
    if ((Q->rear) > Maxsize)   //判断队满
        return 0;
    Q->data[Q->rear] = *x;     //Q->data[Q->rear] = x;
                               //Q->rear = (Q->rear + 1) % Maxsize;//缺陷:浪费一个存储单元
    Q->rear++;
    return 1;
}
int DeQueue(SqQueue* Q, int *e)//出队
{
                             //if (Q->front == Q->rear)
    if (Q->front > Maxsize)
        return 0;
    *e = Q->data[Q->front];  //e = Q->data[Q->front];
                             //Q->front = (Q->front + 1) % Maxsize;
    Q->front++;
    return 1;                //return e;
}
int main(void)
{
    SqQueue Q;//声明一个队列
    int e;
    InitQueue(&Q);
    int i = Maxsize;
    int j = Maxsize;
    for (;i > 0;i--)
    {
        EnQueue(&Q, &i);
        printf("入队元素为:%d\n", i);
    }
    for (;j > 0;j--)
    {
        DeQueue(&Q, &e);//?????
        printf("出队元素为:%d\n",e);//这里读取出队元素该怎么写呢?
    }
   
}