链表问题

Aylazhang 2009-03-27 10:36:47
1,3
3,5
5,90
2,4
4,-1
90,100
100,-1
10,11
11,12
12,13
13,-1
14,-1

想把如上的数据结构整理为
1->3->5->90->100->-1
2->4->-1
10->11->12->13->-1
14->-1

简单说来,就是把第一列的值和第二列的值串起来,条件是前一个第二列的值等于后一个第一列的值,到-1为一条链的结束。
请帮助。
...全文
273 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Aylazhang 的回复:]
还有新方法么?
5楼的方法不太明了。
[/Quote]

可以使用散列方法,key=>value对,那么,f(f(1))就应该等于5,这样同样可以遍历所谓的链表。
Aylazhang 2009-04-02
  • 打赏
  • 举报
回复
还有新方法么?
5楼的方法不太明了。
fire_woods 2009-03-31
  • 打赏
  • 举报
回复
对每个新加进来的数字组,只要看当前所有链表中最后一个数字是否与这个组的第一个数字一样,

如果一样,加到这个链表,否则,以当前组新建一个链表.
fenix124 2009-03-31
  • 打赏
  • 举报
回复
很明显每个数字只能在左边出现一次。
标记一下每个数字在左右出现的次数,只是在左边出现,则它一定为起点。
每个起点往后面找就可以了。
实现方便的话用两个stl map来实现比较方便,链表都免了。
nkmily 2009-03-31
  • 打赏
  • 举报
回复
回复4楼
要想实现动态增加链表数量,我觉得可以先定义vector< list <int>> a;
然后对每次输入得数据判断,如果能加到已存在的链表里就加入,如果没有符合要求得链表,就在vector尾部动态加入一个链表
sefule 2009-03-31
  • 打赏
  • 举报
回复
用一数组记录表头指针.开始构造链表.
1.第一个链表将表头元素放入数组中,依次构造链表,直到-1出现.
2.第二个链表,每次加入元素前都判断是否等于数组中的指针说指向的元素值.如果等于就表尾与之连接.并用当前表头代替原表头.(出现几个-1就会有几个表头.)
3.重复2.
zhanghuayi_xiyou 2009-03-31
  • 打赏
  • 举报
回复
先制定一个空闲链表(可以看作一维),里面的元素表示还能链接新数,例如:1->3->5->90->?链表的元素就是90,如果还有一个,2->4->5->?,下一个链表元素就是5...以此类推。

链表元素结构定义如下:
typedef struct free_link_num_t
{
int link_num; //如上面的例子,值为90,5等等
int save_table_pos; //表示save表中的位置,save表说明在下面
struct free_link_num_t *pnext;
}free_link_num_t;

空闲链表特点是没有一个link_num相同的。相同时就要更新(下一个数不为-1)或是删除(下一个数为-1)

save表(可以看作二维),结构定义如下;
typedef struct data_t
{
int num;
struct data_t *pnext;
}data_t;

typedef struct free_link_num_t
{
int first_num; //如上面的例子,1,2...表示
data_t *pnext_data;
struct free_link_num_t *pnext;
}fln_t;
来新数据时先检查空闲链表,如果没有匹配的数,就在SAVE表中添加,如果有匹配,就利用对应的save_table_pos;找到SAVE表相应的位置(此时遍历的指针为free_link_num_t *pnext),再在相应位置表尾,将data_t添加(此时用到的指针为data_t *pnext_data)
可以根据这两个表进行容错设计。
  • 打赏
  • 举报
回复
先将所有行按照第一个数的大小排序,排序之后的第一行为链表的起点,然后二分查找链表中的下一个节点,直到出现-1,这条链表结束;
将用过的行删除,在剩下的记录中重复上述过程,直到所有行都被并入链表.

WizardOz 2009-03-27
  • 打赏
  • 举报
回复
要是讲究效率的话可以先针对第二列排个序
WizardOz 2009-03-27
  • 打赏
  • 举报
回复
这个,我觉得可以用很直接的方法来做阿,就是当做3元组读入数组(每一对多加一个是否已读取的标记)。
然后在未读的行中一个一个从后往前找。
就是现比较第二项,为-1的时候开始一个链表,把该行标记为已读
然后接着在未读的第二项中找上一次加入链表的第一项。
直到没有-1为止。
dzc8866 2009-03-27
  • 打赏
  • 举报
回复
mark

要是用户输入N组数据,不知道能生成多少个链表,怎么办?怎么将所有的链表输出来?我是想问程序能不能动态实现自定义链表?

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧