2010-08-22 103 views
1

我有以下两个问题。区间链接列表

  1. 我知道链接 列表的概念。什么是 间隔的链表?

  2. 我需要在C/C++中存储非常大的(超过100位)数字,并对其执行按位操作。如果不使用任何大数字库,那么处理这种情况的最佳数据结构是什么?

谢谢

+1

“间隔链表”你在哪里遇到过这个? – Lazer 2010-08-22 18:19:34

回答

4
  1. 名称不响钟声任何。如果区间是对象,那么它只是一个存储这些对象的链表。也许你的意思是skip list
  2. 如果您使用C++,请使用bitset。否则,我只会使用四个32位整数的经典表。
+0

感谢您的回复。 bitset可以存储100,000比特吗? – James 2010-08-22 08:34:29

+0

@詹姆斯 - 当然也取决于硬件,但我肯定会说是。这大大低于兆字节的内存。 – IVlad 2010-08-22 09:04:41

+0

就像我讨厌建议它,如果事先不知道位数,'std :: vector '实际上可能适合使用。 – jalf 2010-08-22 11:53:43

0

对于问题的第二部分,尝试std::bitset

+0

-1不链接到文档。 – 2010-10-05 02:12:53

+0

哦!更新了文档的链接 – dubnde 2010-10-12 13:23:56

0

如果你想编写自己的类来处理大量的比特数(我不知道你为什么会),你可以换一个载体。尽管如此,你还是必须去捕捉自己的溢出。这是一个巨大的痛苦,我只是提出它,因为这是我们为我们所接受的C++类的最后一个项目,哈哈。我不建议这= P

0

我对此发表了评论是另一个问题,这是另一个问题,其他人问。这似乎是指我的评论,所以我会解释我的意思。我建议的是:

struct interval_node { 
     int index; 
     struct interval_node* next; 
} 

其中索引存储位“翻转”的所有点。如果你有类似于11111111111100000000000的东西,这是一个巨大的内存优势,因为它只需要存储第一个位是1(在某个结构之外)的事实,并且该位在第12个索引中翻转(即0-基于),而不是存储每个单独的位本身。这可以扩展到100,000位而不只要吃了尽可能多的内存的序列不有一吨的东西就像

1010101010101010101010101010101010101010101010 

因为它翻转在每个位。