#include <stdio.h>
#include <stdlib.h>//动态存储分配函数,eg:malloc
typedef struct Point//每条道路中有多个点
{
float x,y;
struct Point *next;
}Point;
typedef struct RoadSegment//道路结构体
{
int ID;
int num;
Point *pts; //类似于邻接表,存储“点链表”的头指针
struct RoadSegment *next;
}
int main()
{
//利用带头节点的链表存储道路
RoadSegment *head,*tail,*t;
//初始化道路单链表
head = (RoadSegment*)malloc(sizeof(RoadSegment));
head->next = NULL;
tail = head;
//打开文件
int n=0,id;
FILE *fp = fopen("D:\\小个泡he\\road.text","r");
if(fp == NULL)
{
printf("The file cannot open!\n");
return 1;
}
//每一趟while循环会实例化好一个道路节点,连接起来
while(!feof(fp))//代表文件没有读到末尾
{
//实例化一个道路结构体,尾插法插入道路链表
RoadSegment *rs = (RoadSegment*)malloc(sizeof(RoadSegment));
rs->next = tail->next;
tail->next = rs;
tail = rs;
fscanf(fp,"%d,%d\n",&id,&n);//id和num从文件中输入
rs->num = n;
rs->ID = id;
//利用链表存储道路,初始化点链表
rs->pts = (Point*)malloc(sizeof(Point));//RoadSegment结构体中存储着点链表的头节点
rs->pts->next = NULL;//重点看下这句话,rs是一个道路结构体类型的指针变量
//s1.x,p1是指向s1指针
//(*&s1).x==(*p1).x==p1->x
//rs->pts ->是一个地址指向运算符,指针变量->成员名
//(*rs).pts . 是一个成员运算符,结构体变量.成员名
//实例化一个点指针
Point* p;
p = rs->pts;//指向点链表头节点
//尾插法建立点链表
for(int i =0;i<n;i++)
{
Point* pt = (Point*)malloc(sizeof(Point));//pt紧接在p后
fscanf(fp,"%f,%f\n",&pt->x,&pt->y);
pt->next = p->next;
p-next = pt;
p = pt;
}
}
fclose(fp);//关闭文件
//输入ID为2的路段的坐标
t = head->next;//
while(t!=NULL)
{
if(t->ID==2)
{
printf("&d,%d\n",t-ID,t->num);
Point *p = t->pts->next;
while(p!=NULL)
{
printf("%f,%f\n",p->x,p->y);
p=p->next
}
break;
}
t=t->next;
}
}
2023年6题--读取存储道路集合信息
于 2024-09-30 19:46:30 首次发布