• 2022-06-11 问题

    PON系统为了实现单纤双向传输采用()技术。 A: AWDM B: BFDM C: CTDM D: DCDM

    PON系统为了实现单纤双向传输采用()技术。 A: AWDM B: BFDM C: CTDM D: DCDM

  • 2021-04-14 问题

    系统开发与链表(副本)//“链表与系统开发示例 //跟踪管理系统开发 //要对某人某天所到之处进行跟踪,记录其按时间先后顺序所到过的地名、时间、相关事务等信息,试设计一个系统完成此任务。 //请选择相应位置的正确内容 #include #include #include structpoi_info//定义节点所对应的结构体类型 { charname[31];//数据域,存放地名 chardateTime[35];//数据域,存放日期时间 charothers[81];//数据域,存放发生的相关事务的记录 structpoi_info*next;//指针域,存放后一节点地址 };//要有";" //按顺序录入地名,创建单链表 voidinput(structpoi_info*head) { intsfjx; structpoi_info*q,*p; q=head;//q指向链表头节点 while(q->next!=NULL)//q所指节点不是末节点 [A请选择]//即q指向后一个节点 do { //给新节点分配空间 p=(structpoi_info*)malloc(sizeof(structpoi_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 } //按从前往后顺序输出所有地名 voidoutput(structpoi_info*head) { structpoi_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; } } //查询,判断是否到过某地,若到过的话判断是此人所到过的第几个地方 voidsearch(structpoi_info*head) { intsfjx,count; structpoi_info*p; chardcdm[31]; do { p=head->next;//p指向链表第二个节点,即存放有效数据的第一个节点 count=1;//计数器赋初值为1 printf("\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); } //从链表中删除指定的某些地方 voiddel(structpoi_info*head) { intsfjx=1; structpoi_info*p,*q; chardcdm[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); } //往某个地名前插入一个地名 voidinsert(structpoi_info*head) { intsfjx=1; structpoi_info*p,*q,*x; chardcdm[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=(structpoi_info*)malloc(sizeof(structpoi_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); } //修改某一指定的地名 voidmodify(structpoi_info*head) { intsfjx=1; structpoi_info*p; chardcdm[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); } //按顺序保存 voidsave(structpoi_info*head) { structpoi_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"); } } //按顺序读取,添加到已有链表的末尾 voidread(structpoi_info*head) { FILE*fp; charname[31]; chardateTime[25]; charothers[81]; structpoi_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=(structpoi_info*)malloc(sizeof(structpoi_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 } //释放链表空间,使之成为一个空链表 voidrelease(structpoi_info*head) { structpoi_info*p,*q; //p指向第二个节点,即待释放部分的首节点,从此节点开始逐个释放 p=head->next; while(p!=NULL) { q=p->next;//q指向当前节点的后一个节点 [I请选择]//释放当前节点 p=q;//p重新指向链表待释放部分的首节点 } //将链表首节点的指针域置为NULL,该节点此时也是末节点 [J请选择] printf("\n空间已正常释放!\n"); } intmain() { intxz=1; structpoi_info*head; //给头节点分配空间 head=(structpoi_info*)malloc(sizeof(structpoi_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)//根据菜单选项的不同调用不同函数 { case1:input(head);break; case2:output(head);break; case3:search(head);break; case4:del(head);break; case5:modify(head);break; case6:insert(head);break; case7:save(head);break; case8:read(head);break; case9:release(head);break; case0: release(head); free(head);//释放头节点空间 printf("谢谢使用!\n"); break; } system("pause"); } } return0; }

    系统开发与链表(副本)//“链表与系统开发示例 //跟踪管理系统开发 //要对某人某天所到之处进行跟踪,记录其按时间先后顺序所到过的地名、时间、相关事务等信息,试设计一个系统完成此任务。 //请选择相应位置的正确内容 #include #include #include structpoi_info//定义节点所对应的结构体类型 { charname[31];//数据域,存放地名 chardateTime[35];//数据域,存放日期时间 charothers[81];//数据域,存放发生的相关事务的记录 structpoi_info*next;//指针域,存放后一节点地址 };//要有";" //按顺序录入地名,创建单链表 voidinput(structpoi_info*head) { intsfjx; structpoi_info*q,*p; q=head;//q指向链表头节点 while(q->next!=NULL)//q所指节点不是末节点 [A请选择]//即q指向后一个节点 do { //给新节点分配空间 p=(structpoi_info*)malloc(sizeof(structpoi_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 } //按从前往后顺序输出所有地名 voidoutput(structpoi_info*head) { structpoi_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; } } //查询,判断是否到过某地,若到过的话判断是此人所到过的第几个地方 voidsearch(structpoi_info*head) { intsfjx,count; structpoi_info*p; chardcdm[31]; do { p=head->next;//p指向链表第二个节点,即存放有效数据的第一个节点 count=1;//计数器赋初值为1 printf("\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); } //从链表中删除指定的某些地方 voiddel(structpoi_info*head) { intsfjx=1; structpoi_info*p,*q; chardcdm[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); } //往某个地名前插入一个地名 voidinsert(structpoi_info*head) { intsfjx=1; structpoi_info*p,*q,*x; chardcdm[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=(structpoi_info*)malloc(sizeof(structpoi_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); } //修改某一指定的地名 voidmodify(structpoi_info*head) { intsfjx=1; structpoi_info*p; chardcdm[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); } //按顺序保存 voidsave(structpoi_info*head) { structpoi_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"); } } //按顺序读取,添加到已有链表的末尾 voidread(structpoi_info*head) { FILE*fp; charname[31]; chardateTime[25]; charothers[81]; structpoi_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=(structpoi_info*)malloc(sizeof(structpoi_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 } //释放链表空间,使之成为一个空链表 voidrelease(structpoi_info*head) { structpoi_info*p,*q; //p指向第二个节点,即待释放部分的首节点,从此节点开始逐个释放 p=head->next; while(p!=NULL) { q=p->next;//q指向当前节点的后一个节点 [I请选择]//释放当前节点 p=q;//p重新指向链表待释放部分的首节点 } //将链表首节点的指针域置为NULL,该节点此时也是末节点 [J请选择] printf("\n空间已正常释放!\n"); } intmain() { intxz=1; structpoi_info*head; //给头节点分配空间 head=(structpoi_info*)malloc(sizeof(structpoi_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)//根据菜单选项的不同调用不同函数 { case1:input(head);break; case2:output(head);break; case3:search(head);break; case4:del(head);break; case5:modify(head);break; case6:insert(head);break; case7:save(head);break; case8:read(head);break; case9:release(head);break; case0: release(head); free(head);//释放头节点空间 printf("谢谢使用!\n"); break; } system("pause"); } } return0; }

  • 1