#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); 这里读取出队元素该怎么写呢?
}
}
循环队列开辟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);//这里读取出队元素该怎么写呢?
}
}