标题:求大佬帮忙给个程序和思路
只看楼主
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
结帖率:50%
已结贴  问题点数:20 回复次数:10 
求大佬帮忙给个程序和思路
例如有一个txt的文档,里面的数据是这样的
id=001,name=...,score=...,nextid=003
id=002,name=...,score=...,nextid=005
将数据读取后,然后第一行的最后一个nextid的值是多少,就读取到和id和第一行nextid相同的那一行,中间有可能会跳过几行,放读到存放数据的数组末尾后,再循环一次,但是第一次已经用链表串起来的不需要再读,设置一个标记符,将第一行的id设为链表的头,第一次循环完后,假如第二行没有读到,那就从第二行开始继续同样的操作,直到循环完毕,需要用到链表的知识,请大佬们给个思路和程序,万分感谢!!
搜索更多相关主题的帖子: 思路 数据 一行 循环 链表 
2019-04-23 12:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
听不懂,为什么不举个例子?

1. nextid=003 和 id=003 肯定是匹配的,那和 id=03 及 id=3 匹配吗?

2. 对于如下的例子,id=003已经是最后一个,那其nextid=应该是多少?
id=001,name=001,score=001,nextid=003
id=002,name=002,score=002,nextid=005
id=003,name=003,score=003,nextid=???

3. 如果多个nextid=指向同一个值怎么办?
id=001,name=001,score=001,nextid=003
id=002,name=002,score=002,nextid=003
id=003,name=003,score=003,nextid=???

4. 如果nextid=指向不存在的值怎么办?
id=001,name=001,score=001,nextid=99999999999999999999999999999
id=002,name=002,score=002,nextid=003

5. 第一次出现的未必是表头怎么办?
id=001,name=001,score=001,nextid=???
id=002,name=002,score=002,nextid=001
如上,第二次循环时发现第一行应该接在第二行后面。

6. 具体每个字段的格式是什么?即,只允许出现数字吗?最长允许多少?……
2019-04-23 12:33
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
得分:0 
回复 2楼 rjsp
名字是字符串的形式,如果指向的值不存在,目前不考虑这个,同时指向一个的也不考虑,最后一行最后一个的nextid设为0如果检测到,就退出,nextid和id是同样的格式003类似这样的,就是要把第一次出现的设置为表头

[此贴子已经被作者于2019-4-23 12:47编辑过]

2019-04-23 12:45
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
得分:0 
回复 2楼 rjsp
里面的name是wang类似于这样的字符串,然后将第一个得到的行的id作为链表的头,然后根据那一行的next_id跳到所对应的id,比如有五行,第一次只扫描了三行,到了末尾了,然后再来一次,第一次串在一起的就不需要了,把没有的再串起来,用头插法添加到链表中,最后把链表的内容打印出来
2019-04-23 16:11
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
得分:20 
建议用结构体数组把每行读进来,直接就是链表了。id对应数组下标。
程序代码:
typedef struct node{
    int id;
    char name[10];
    double score;
    int next;
}Node;
//声明数组
Node list[100];
//访问next
next_id = list[next_id].next;
printf("%s %f",list[next_id].name,list[next_id].score);


[此贴子已经被作者于2019-4-23 17:21编辑过]


saber,别哭.
2019-04-23 17:20
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
得分:0 
回复 5楼 幻紫灵心
我就是这样做的,就是正常的比如说五行,每一行的nextid都对应不同的一行的id,这样是把五行循环读取都成功的,但是目前遇到的问题是,比如第一行直接跳到了第三行,然后第三行跳到第五行,结束了,我需要重新再来一遍,把没有扫描到的再扫一次,然后要把第一次读取的id作为链表的头,然后第二次查找时,第一次找过的不需要再找,一直循环到完毕为止
2019-04-23 17:33
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
得分:0 
哪里,一次不就全部读完了?
读一行存一行啊,就按id对应下标存就好了。

saber,别哭.
2019-04-23 17:45
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
得分:0 
回复 7楼 幻紫灵心
一维数组不是错了五行嘛,比如刚开始的第一行的id是001,nextid是003,那就是读取id是003的那一行,是这样的,然后第一遍比如id是003那一行的nextid是005,到最后一行了,读完了就结束了,需要再循环读,然后第一次读到的那一行的id为链表的头,因为第二行没有读到,所以要再读一次,但是第一次读过的就不能再读了,这样完了之后,用头插法将它插进去形成一个链表,然后打印出来
2019-04-23 17:53
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
得分:0 
我的意思是,你就按行读,不管什么next,读一行存一行,存就按读到的id存,一次就读完了。
这有很多弊端
1.id最大值可能未知。
2.空间可能浪费很多,但是如果id从1连续,就不会浪费空间了。
3.id必须唯一。
...等等

但是,只要符合格式的数据,这样存是很方便简单的。

访问链表才需要用到next
已访问的可以设置标志变量,可以设置在结构体里面,也可以设置标志访问数组。

saber,别哭.
2019-04-23 18:12
congcongdema
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-4-23
得分:0 
回复 9楼 幻紫灵心
就是访问后,设置一个标记,这一块不会,能写一下程序嘛,谢谢!
2019-04-23 18:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494363-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.631580 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved