1、/创建一个结点 a=time(NULL); strftime(Run_time,79,%H:%M:%S,localtime(&a); temp_head=head; if(temp_head=NULL) printf(无数据源 system(pause exit(5); while(temp_head!=NULL) if(temp_head-stRoadRec.linkid=Class) end=(Road*)malloc(sizeof(Road);#linkid=%d,temp_head-stRoadRec.LinkID);roadnameflag=%dstRoadRec.roadnamef
2、lag);brunch=%dstRoadRec.brunch);dispclass=%dstRoadRec.linkid);roadname=%s#nstRoadRec.roadname); p-stRoadRec.LinkID=temp_head-stRoadRec.LinkID;stRoadRec.roadnameflag=temp_head-stRoadRec.roadnameflag;stRoadRec.brunch=temp_head-stRoadRec.brunch;stRoadRec.linkid=temp_head-stRoadRec.linkid;stRoadRec.road
3、name=temp_head-stRoadRec.roadname;next=end; p=p-next; i+; temp_head=temp_head- end-next=NULL; p- if(i=5) save(prev);查询结果数大于5,已保存至SearchResult.txtn b=time(NULL);b);本次查找用时%d秒.n,b-a);voidSearchById(Road*head) inti=0,LinkId;请输入您所要查找的道路的ID:LinkId); exit(3);stRoadRec.LinkID=LinkId) temp_head=temp_head-voi
4、dSearchByName(Road*head) inti=0; charName30;请输入您所要查找的道路的名称:%s,Name); exit(6); if(strcmp(temp_head-stRoadRec.roadname,Name)=0)voidupdata(Road*head) FILE*pp; FILE*ppp; FILE*infile; FILE*outfile; time_ta; charfilename20; Road*p1; Road*p2; pp=fopen(newfile.txt,w if(pp=NULL)文件创建失败n exit(1); /判断文件是否创建成功/
5、p1=head; if(p1=NULL)空指针n /判断头指针是否为空/ while(p1!=NULL) fprintf(pp,%d%d%d%s%d%d,p1-stRoadRec.data_size,p1-stRoadRec.LinkID,p1-stRoadRec.road_size,p1-stRoadRec.roadname,p1-stRoadRec.brunch,p1- p1=p1- fclose(pp);/将动态链表中的内容写入文件newfile中/ strcpy(filename,update.dat infile=fopen(jilu.txt fscanf(infile,%d%sa,
6、&filename);/将时间和update.dat都写入文件中/ outfile=fopen(r if(outfile=NULL) fprintf(outfile,filename);/将文件中的内容读出来作为文件名/ fclose(outfile);/将时间加入到文件名中,使更新后之前的文件内容不会被覆盖/ ppp=fopen(filename,wb if(ppp=NULL)更新文件创建失败n p2=head; while(p2! fwrite(p2,sizeof(Road),1,ppp); p2=p2-文件更新中.n文件更新成功n fclose(ppp);/文件更新完毕,将排序后的内容写
7、入文本文件和二进制文件中/voidSearchByBruch(Road*head) inti=0,Bruch;请输入您所要查找的道路的岔路数:Bruch); p=(Road*)malloc(sizeof(Road); prev=p; exit(4);stRoadRec.brunch=Bruch) i的结果是%dn,i);Road*readfile(void) FILE*fp; unsignedshorttemp_data_size1;/数据大小2bytebuffunsignedinttemp_LinkID1;/道路编号4bytebuffunsignedshorttemp_road_size1;
8、/道路名称的尺寸2bytebuff unsignedinttemp_info1;/道路信息4bytebuff chartemp_name5000;/GTBL.dat不存在就输入 char*p_name;/道路名称指针 Road*head,*pCur,*pEnd; pCur=(Road*)malloc(sizeof(Road); head=pCur; fp=fopen(GTBL.datrb+ if(fp=NULL)错误:不能打开GTBL.datn looperror:n请输入你要打开的文件名n scanf(,temp_name); fp=fopen(temp_name, if(fp=NULL)不
9、能打开%s gotolooperror; else读取成功n while(1) pEnd=(Road*)malloc(sizeof(Road); fread(temp_data_size,sizeof(unsignedshort),1,fp); pCur-stRoadRec.data_size=M_CHG_INT16(temp_data_size0);/printf(,pCur-stRoadRec.data_size); fread(temp_LinkID,sizeof(unsignedint),1,fp);stRoadRec.LinkID=M_CHG_INT32(temp_LinkID0);
10、 fread(temp_road_size,sizeof(short),1,fp);stRoadRec.road_size=M_CHG_INT16(temp_road_size0); fread(temp_info,sizeof(unsignedint),1,fp); temp_info0=M_CHG_INT32(temp_info0);stRoadRec.linkid=(0xf&temp_info0);stRoadRec.brunch=(0x70&temp_info0)4);stRoadRec.roadnameflag=(0x80&7); if(pCur-stRoadRec.roadname
11、flag=1)stRoadRec.roadname=(char*)malloc(pCur-stRoadRec.data_size-12); p_name=(char*)malloc(pCur- fread(pCur-stRoadRec.roadname,(pCur-stRoadRec.data_size-12),1,fp); /pCur-stRoadRec.roadname=p_name;stRoadRec.roadname=NULL; if(feof(fp) break;next=pEnd; pCur=pCur-returnhead;voidQListSort(Road*head,Road*
12、end)Road*right;Road*left_walk,*right_walk;Road*pivot,*old;intcount,left_count,right_count;if(*head=end)return;dopivot=*head;left_walk=head;right_walk=&right;left_count=right_count=0;/取第一个节点作为比较的基准,小于基准的在左面的子链表中,/大于基准的在右边的子链表中for(old=(*head)-old!=end;old=old-next)if(old-stRoadRec.LinkIDstRoadRec.Link
13、ID)/小于基准,加入到左面的子链表,继续比较+left_count;*left_walk=old;/把该节点加入到左边的链表中,left_walk=&(old-next);else/大于基准,加入到右边的子链表,继续比较+right_count;*right_walk=old;/合并链表*right_walk=end;/结束右链表*left_walk=pivot;/把基准置于正确的位置上next=right;/把链表合并/对较小的子链表进行快排序,较大的子链表进行迭代排序。if(left_walkright_walk)QListSort(&(pivot-next),end);end=pivo
14、t;count=left_count;elseQListSort(head,pivot);head=&count=right_count;while(count1);Road*BubbleSort(Road*head)Road*endpt;/*控制循环比较*/Road*p;/*临时指针变量*/Road*p1;Road*p2;p1=(Road*)malloc(sizeof(Road);p1-next=head;/*注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节点没有前驱,我们不能交换地址。*/head=p1;/*让head指向p1节点,排序完成后,我们再把p1节点释放掉*/for(endpt=NULL;endpt!=head;endpt=p)/*结合第6点理解*/for(p=p1=head;next-next!=endpt;p1=p1-if(p1-stRoadRec.LinkIDstRoadRec.LinkID)/*如果前面的节点键值比后面节点的键值大,则交换*/p2=p1-/*结合第1点理解*/nex
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1