//1、设置程序的环境,将下列环境设置代码补充完整。
#include "stdio.h"
#include "string.h"
#define OK 1
#define ERROR 0
typedef int status;
typedef struct stu{ //添加图书信息结构
char no[20]; //学号
char name[50]; //姓名
float score; //成绩
}stu;
typedef struct QNode{ /* 定义链队列的结点结构类型 */
stu data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct { /* 定义队列的链式表示结构类型 */
QueuePtr front;
QueuePtr rear;
}LinkQueue; //定义链队列类型变量
status initQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
}
//3、在第1和第2题的基础上,编写入队函数、出队函数。
/* 图书数据入队 */
status append(LinkQueue &Q)
{ QNode *p;
p=new QNode;
printf("输入学号 no=?");
scanf("%s",&p->data.no);
printf("输入姓名 name=?");
scanf("%s",p->data.name);
printf("输入成绩 score?");
scanf("%f",&p->data.score);
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
/* 出队*/
status Qdelete(LinkQueue &Q,stu &e)
{ QNode *p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
strcpy(e.no,p->data.no ); //将出队元素值保存到e
strcpy(e.name,p->data.name);
e.score=p->data.score;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
delete p;
return OK;
}
change(LinkQueue &Q,stu e){
QNode *p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
while(p){
if(strcmp(p->data.name,e.name)==0)
{
printf("find!");
p->data.score=e.score;
return OK;
}
p=p->next;
}
return ERROR;
}
//4、输入显示队列元素的函数display ( )。
status display(LinkQueue Q)
{ QNode *p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
printf("链队列元素是:\n");
printf("学号:\t姓名\t\t成绩\t\n");
while(p!=NULL)
{ printf("%s\t",p->data.no);
printf("%s\t",p->data.name);
printf("%.0f\t\n",p->data.score);
p=p->next;
}
printf("\n");
return OK;
}
//5、输入主函数对上面各个函数实现调用,记录并分析程序的运行结果。
main()
{
int x,n,i; stu e;
QNode *p;
LinkQueue q;
x=initQueue(q);
if(x) printf("初始化成功!");
printf("请输入元素的个数");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
append(q);
}
display(q);
Qdelete(q,e);
printf("被删除的学生元素是:\n");
printf("%s\t%s\t\t%0.2f\t\n",e.no,e.name,e.score);
display(q);
printf("你要修改的姓名=?成绩=?");
scanf("%s",e.name);
scanf("%f",&e.score);
change(q,e);
display(q);
if(!x) printf("not find");
}