# include
# include
# include
typedef struct Node
{
int Data; // 数据域;
struct Node * pNext; // 指针域,指向下一个节点;
}QNODE, * PQNODE;
typedef struct Queue
{
PQNODE rear; // 队尾指针;
}LinkQueue;
// 前置声明;
void init_Queue(LinkQueue *); // 初始化循环链队列;
bool is_empty(LinkQueue); // 判断队列是否为空;
void en_Queue(LinkQueue,int); // 入队;
int main(void)
{
LinkQueue Q;
Q.rear = NULL;
init_Queue(&Q);
en_Queue(Q, 1);
return 0;
}
void init_Queue(LinkQueue *Q)
{
Q->rear = (PQNODE)malloc(sizeof(QNODE));
if (NULL == Q->rear)
{
printf("内存不足,初始化循环链队列失败!程序终止!\n");
exit(-1);
}
Q->rear->pNext = Q->rear; // 构建循环链队列;
printf("创建循环链队列成功!\n");
return;
}
bool is_empty(LinkQueue Q)
{
if (Q.rear == Q.rear->pNext)
return true;
else
return false;
}
void en_Queue(LinkQueue Q, int val)
{
PQNODE p = (PQNODE)malloc(sizeof(QNODE));
if (NULL == p)
{
printf("内存不足,入队失败!\n");
exit(-1);
}
p->Data = val;
p->pNext = Q.rear->pNext; // 倒数第7行;
Q.rear->pNext = p;
Q.rear = p;
printf("元素%d入队成功!\n", val);
return;
}
你参数传递的是变量的值,在init_Queue修改不了Q的值,当init_Queue返回后,Q.rear仍然为NULL。以上是修改后的代码