题目内容

//“链表与系统开发示例//跟踪管理系统开发//要对某人某天所到之处进行跟踪,记录其按时间先后顺序所到过的地名、时间、相关事务等信息,试设计一个系统完成此任务。//请选择相应位置的正确内容#include #include #include struct poi_info //定义节点所对应的结构体类型{char name[31];//数据域,存放地名char dateTime[35];//数据域,存放日期时间char others[81];//数据域,存放发生的相关事务的记录struct poi_info *next;//指针域,存放后一节点地址};//要有";"//按顺序录入地名,创建单链表void input(struct poi_info *head){int sfjx;struct poi_info *q,*p;q=head;//q指向链表头节点while(q->next!=NULL)//q所指节点不是末节点[A请选择]//即q指向后一个节点do{//给新节点分配空间p=(struct poi_info *)malloc(sizeof(struct poi_info));if(p==NULL)//分配不成功printf("\n空间分配不成功,无法进行记录!\n");else{printf("\n请输入要记录的地名:");scanf("%s",p->name);//读入地名并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入日期时间:");scanf("%s",p->dateTime);//读入日期时间并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入相关事务:");scanf("%s",p->others);//读入相关事务并存入新节点数据域fflush(stdin);//清空输入缓冲区q->next=p;//将新节点连到当前链表末尾q=p;//即让q指向新链表的末节点,以方便后续节点的添加}printf("\n是否继续(0-结束其它-继续):");scanf("%d",&sfjx);//输入用户选择,决定是否继续}while(sfjx!=0); //直到用户决定结束为止q->next=NULL;//将新链表末节点的指针域置为NULL}//按从前往后顺序输出所有地名void output(struct poi_info *head){struct poi_info *p;[B请选择]printf("\n以下为输出结果:\n");while(p!=NULL){printf("%-s\n%-s\n%-s\n------\n",p->name,p->dateTime,p->others);p=p->next;}}//查询,判断是否到过某地,若到过的话判断是此人所到过的第几个地方void search(struct poi_info *head){int sfjx,count;struct poi_info *p;char dcdm[31];do{p=head->next;//p指向链表第二个节点,即存放有效数据的第一个节点count=1;//计数器赋初值为1printf("\n请输入要查询的地名:");scanf("%s",dcdm);//p!=NULL表示没有找完,strcmp(dcdm,p->name)!=0表示没找到while((p!=NULL)&&(strcmp(dcdm,p->name)!=0)){p=p->next;//p指向后一个节点count++;//计数器增1}if([C请选择])//p==NULL表示没找到printf("\n此人没有到过以下地方:%s\n",dcdm);else{printf("%-s\n%-s\n%-s\n------\n",p->name,p->dateTime,p->others);printf("是此人到过的第%d站。\n",count);}printf("\n是否继续(0-结束其它-继续):");scanf("%d",&sfjx);//输入用户选择,决定是否继续}while(sfjx!=0);}//从链表中删除指定的某些地方void del(struct poi_info *head){int sfjx=1;struct poi_info *p,*q;char dcdm[31];do{[D请选择]//q指向头节点p=head->next;//p指向链表第二个节点printf("\n请输入要删除的地名:");scanf("%s",dcdm);while((p!=NULL)&&(strcmp(dcdm,p->name)!=0)){q=p;//q指向后一个节点,可改为:q=q->next;p=p->next;//p指向后一个节点}if(p==NULL)printf("\n此人没有到过以下地方:%s\n",dcdm);else{[E请选择]//将待删节点的前后两节点连起来free(p);//删除相应节点printf("\n已成功删除!\n");}printf("\n是否继续(0-结束其它-继续):");scanf("%d",&sfjx);}while(sfjx!=0);}//往某个地名前插入一个地名void insert(struct poi_info *head){int sfjx=1;struct poi_info *p,*q,*x;char dcdm[31];do{q=head;//q指向头节点p=head->next;//p指向链表第二个节点printf("\n请输入用于指示位置的地名:");scanf("%s",dcdm);while((p!=NULL)&&(strcmp(dcdm,p->name)!=0)){[F请选择]p=p->next;}if(p==NULL)printf("\n此人没有到过以下地方:%s,无法确定插入位置!\n",dcdm);else{//给新节点分配空间x=(struct poi_info *)malloc(sizeof(struct poi_info));if(x==NULL)printf("\n空间分配不成功,无法进行记录!\n");else{printf("\n请输入要记录的地名:");scanf("%s",p->name);//读入地名并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入日期时间:");scanf("%s",p->dateTime);//读入日期时间并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入相关事务:");scanf("%s",p->others);//读入相关事务并存入新节点数据域fflush(stdin);//清空输入缓冲区//以下两条语句用于将新节点插入至相应位置x->next=p;//新节点插到位置节点之前q->next=x;//新节点连到位置节点的前一节点之后printf("\n已成功插入!\n");}}printf("\n是否继续(0-结束其它-继续):");scanf("%d",&sfjx);}while(sfjx!=0);}//修改某一指定的地名void modify(struct poi_info *head){int sfjx=1;struct poi_info *p;char dcdm[31];do{p=head->next;printf("\n请输入要修改的地名:");scanf("%s",dcdm);while((p!=NULL)&&(strcmp(dcdm,p->name)!=0))p=p->next;if(p==NULL)printf("\n此人没有到过以下地方:%s\n",dcdm);else{printf("\n原信息为:\n");printf("%-s\n%-s\n%-s\n------\n",p->name,p->dateTime,p->others);printf("\n请重新输入相关信息:");printf("\n请输入要记录的地名:");scanf("%s",p->name);//读入地名并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入日期时间:");scanf("%s",p->dateTime);//读入日期时间并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n请输入相关事务:");scanf("%s",p->others);//读入相关事务并存入新节点数据域fflush(stdin);//清空输入缓冲区printf("\n已成功修改!\n");}printf("\n是否继续(0-结束其它-继续):");[G请选择]}while(sfjx!=0);}//按顺序保存void save(struct poi_info *head){struct poi_info *p;FILE *fp;fp=fopen("data.txt","w");if(fp==NULL)printf("文件无法打开,数据不能保存!\n");else{p=head->next;while(p!=NULL){fprintf(fp,"%-s\n%-s\n%-s\n",p->name,p->dateTime,p->others);p=p->next;}fclose(fp);printf("已成功保存!\n");}}//按顺序读取,添加到已有链表的末尾void read(struct poi_info *head){FILE *fp;char name[31];char dateTime[25];char others[81];struct poi_info *q,*p;fp=fopen("data.txt","r");if(fp==NULL)printf("文件无法打开,数据不能读取!\n");else{//以下代码找到当前链表的末节点q=head;while(q->next!=NULL)q=q->next;fscanf(fp,"%s%s%s",name,dateTime,others);while([H请选择])//文件中还有未读数据{p=(struct poi_info *)malloc(sizeof(struct poi_info));if(p==NULL)printf("\n空间分配不成功,无法进行记录!\n");else{strcpy(p->name,name);strcpy(p->dateTime,dateTime);strcpy(p->others,others);q->next=p;q=p;}fscanf(fp,"%s%s%s",name,dateTime,others);}fclose(fp);//关闭文件printf("读取完成!\n");}q->next=NULL;//末节点指针域置为NULL}//释放链表空间,使之成为一个空链表void release(struct poi_info *head){struct poi_info *p,*q;//p指向第二个节点,即待释放部分的首节点,从此节点开始逐个释放p=head->next;while(p!=NULL){q=p->next;//q指向当前节点的后一个节点[I请选择]//释放当前节点p=q;//p重新指向链表待释放部分的首节点}//将链表首节点的指针域置为NULL,该节点此时也是末节点[J请选择]printf("\n空间已正常释放!\n");}int main(){int xz=1;struct poi_info *head;//给头节点分配空间head=(struct poi_info *)malloc(sizeof(struct poi_info));if(head==NULL)printf("\n空间分配不成功!\n");else{head->next=NULL;//将头节点指针域置为NULL,完成链表初始化while(xz!=0){system("cls");//清除屏幕printf("\n 欢迎使用民用跟踪记录系统!\n\n\n");printf("1-添加 2-输出 3-查询 4-删除 5-修改 6-插入 7-保存 8-读取 9-清空 0-退出\n");//显示文本形式菜单printf("\n请选择:");scanf("%d",&xz); //输入菜单选项switch(xz)//根据菜单选项的不同调用不同函数{case 1:input(head);break;case 2:output(head);break;case 3:search(head);break;case 4:del(head);break;case 5:modify(head);break;case 6:insert(head);break;case 7:save(head);break;case 8:read(head);break;case 9:release(head);break;case 0:release(head);free(head);//释放头节点空间printf("谢谢使用!\n");break;}system("pause");}}return 0;}

查看答案
更多问题

.由一组数据的最大值、最小值、中位数和两个四分位数5个特征值绘制而成的,反映原始数据分布的图形,称为()

A. 直方图
B. 箱线图
C. 茎叶图
D. 雷达图

箱线图由哪些特征值绘制而成()

A. 最大值
B. 最小值
C. 中位数
D. 两个四分位数
E. 均值

与直方图相比,茎叶图()。

A. 没有保留原始数据的信息
B. 保留了原始数据的信息
C. 适合描述小批量数据的分布
D. 不能有效展示数据的分布
E. 更适合描述大批量数据的分布

在统计表中,对于没有数据的表格单元,用空白单元格表示。

A. 对
B. 错

答案查题题库