#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define SIZE 66 //明示常量定义10,可以自行修改
typedef int datatype;
//设计结构体,定义用户相关信息
typedef struct client
{
datatype id; //用户id序号
char name[SIZE]; /*定义字符数组存储用户名字,可考虑用字符指针,
但是字符指针不能逐个打印字符,暂且先用字符数组*/
}nclient;
//设计队列节点类型(即节点的内容)
typedef struct node
{
nclient data; //队列节点的数据域具有nclient类型
struct node* next; //队列节点的next指针域
}ND, * PND;
//设计队列基本操作的指针
typedef struct linkqueue
{
PND front; //队头指针
PND rear; //队尾指针
}lq, * plq;
//构造函数,用于建立链式队列
plq initqueue(void)
{
plq queue = (plq)malloc(sizeof(lq)); //定义一个队列,并且申请大小为队列操作本身lq的空间
if (queue == NULL) //判断代码健壮性是否良好
return NULL;
queue->front = NULL;//队列头尾开始都指向NULL
queue->rear = NULL;
return queue; //将*plq类型的queue返回
}
bool emqueue(plq queue)
{
datatype id = 0;
PND pnew = (PND)malloc(sizeof(ND)); //定义一个node类型新节点用于存放新用户信息
if (pnew == NULL) //判断代码健壮性好坏
return false;
printf("please enter the client name: ");
scanf_s("%s", pnew->data.name,SIZE); /*atttion: 表达data的name,需要用.结构成员运算符。否则
出现E3364错误, 结构体变量是用"."*/
id++; //插入用户名后,用户获得一个id,id+1
pnew->data.id = id;
pnew->next = NULL; //pnew指向空
queue->rear->next = pnew; //将rear的next指向新节点,完成节点的连接
queue->rear = pnew; //将rear的位置移到最新节点位置,保证始终为队尾
return false;
}
bool is_empty(plq queue)
{
if (queue->front == queue->rear)
return true;
else
return false;
}
bool dequeue(plq queue)
{
if (is_empty(queue))
{
printf("the linkqueue is empty\n");
return false;
}
PND ptamp = queue->front->next;
}
bool showqueue(plq queue)
{
if (is_empty(queue))
{
printf("the linkqueue is empty\n");
return false;
}
PND ptamp = queue->front->next;
while (ptamp != queue->rear)
{
printf("%d", ptamp->data.id);
printf("%s", ptamp->data.name);
ptamp = ptamp->next;
}
return true;
}
int main(void)
{
plq queue = initqueue();
emqueue(queue);
//showqueue(queue);
}
想问一下,这个是C语言的队列,在程序运行到第56行的时候发生了内存冲突,想问一下,是什么原因呀,该怎么解决?