数据结构中的 集合结构是什么?

我是暖风啊 2018-01-22 09:20:05
RT,最好举例说明,不要生搬书上的理论。
...全文
2482 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_admi 2018-02-01
  • 打赏
  • 举报
回复
综上,只要保证一堆元素的互异性,那么就是集合了。 据说STL的set是使用红黑树来实现的,楼主可以自己去研究下源码。
super_admi 2018-02-01
  • 打赏
  • 举报
回复
数据结构中的集合,和数学中的集合,理论上应该是一样的,但实际应用中是有差别的。 1.确定性:在数学中,必须指明集合元素的确定性,但在计算机里,有不确定的元素吗?哪怕是什么野指针之类的,其值也是确定的; 2.互异性:这恐怕是计算机里的集合最重要的一点; 3.无序性:数学中,集合是无序的,计算机中,理论上,集合也是无序的,但实际操作中,无序的集合,你怎么遍历?所以最终还是有序的。
destory27 2018-02-01
  • 打赏
  • 举报
回复
jiht594 2018-01-26
  • 打赏
  • 举报
回复
你先把书搬出来大家看看
jiht594 2018-01-26
  • 打赏
  • 举报
回复
听说过集合和结构、连起来没听说过
自信男孩 2018-01-24
  • 打赏
  • 举报
回复
https://www.cnblogs.com/amiezhang/p/7418107.html 说的集合结构是:合集,并集以及交集吗?如果不是那么就没听说过这个集合结构了
zilaishuichina 2018-01-24
  • 打赏
  • 举报
回复
数组 链表 树 图 这些就是集合结构
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
仅供参考:
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
    char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
    char *Vowels   = "aeiou" ;
    char *AlphaNum = "0123456789abcdef" ;
    char result[45] ;
    char *last ;

    int lenA  = strlen(Alphabet) ;
    int lenV  = strlen(Vowels  ) ;
    int lenAN = strlen(AlphaNum) ;

    cout << "Alphabet = " << Alphabet << endl ;
    cout << "Vowels   = " << Vowels   << endl ;
    cout << "AlphaNum = " << AlphaNum << endl ;

    cout << "\nusing non-predicate versions" << endl ;

    //non-predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //non-predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    cout << "\nusing predicate versions" << endl ;

    //predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result  , less<char>()) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result  , less<char>()) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result  , less<char>()) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result  , less<char>()) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    return 0 ;
}
集合的实现应该使用位图法,不仅仅是节省内存,运算快,关键是可以避免同一集合中重复元素的问题,用数组之类的模拟都稍逊风骚。
赵4老师 2018-01-23
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 真实世界中,从来就没有发生过哪怕一次1+1=2!
真相重于对错 2018-01-22
  • 打赏
  • 举报
回复
数据结构的集合是逻辑上的! 具体到语言的实现,可以是数组,也可以用stl 库内的容器比如vector
真相重于对错 2018-01-22
  • 打赏
  • 举报
回复
引用 5 楼 oNuanFeng 的回复:
[quote=引用 3 楼 shihengzhen101 的回复:] [quote=引用 2 楼 oNuanFeng 的回复:] [quote=引用 1 楼 hdt 的回复:] 数据结构的集合是逻辑上的! 具体到语言的实现,可以是数组,也可以用stl 库内的容器比如vector
你这说了和不说一个样[/quote] 我感觉他说的不错啊[/quote] 我要的是举例说明什么是集合结构,而不是实现层面的,要结合真实的例子,代码实现谁不会啊[/quote] 从计算机科学来说,代码不就是真实? 不知你的真实的例子,是指什么??
我是暖风啊 2018-01-22
  • 打赏
  • 举报
回复
引用 3 楼 shihengzhen101 的回复:
[quote=引用 2 楼 oNuanFeng 的回复:] [quote=引用 1 楼 hdt 的回复:] 数据结构的集合是逻辑上的! 具体到语言的实现,可以是数组,也可以用stl 库内的容器比如vector
你这说了和不说一个样[/quote] 我感觉他说的不错啊[/quote] 我要的是举例说明什么是集合结构,而不是实现层面的,要结合真实的例子,代码实现谁不会啊
赵4老师 2018-01-22
  • 打赏
  • 举报
回复
仅供参考:
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
    char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
    char *Vowels   = "aeiou" ;
    char *AlphaNum = "0123456789abcdef" ;
    char result[45] ;
    char *last ;

    int lenA  = strlen(Alphabet) ;
    int lenV  = strlen(Vowels  ) ;
    int lenAN = strlen(AlphaNum) ;

    cout << "Alphabet = " << Alphabet << endl ;
    cout << "Vowels   = " << Vowels   << endl ;
    cout << "AlphaNum = " << AlphaNum << endl ;

    cout << "\nusing non-predicate versions" << endl ;

    //non-predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //non-predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    cout << "\nusing predicate versions" << endl ;

    //predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result  , less<char>()) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result  , less<char>()) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result  , less<char>()) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result  , less<char>()) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    return 0 ;
}
AlbertS 2018-01-22
  • 打赏
  • 举报
回复
引用 2 楼 oNuanFeng 的回复:
[quote=引用 1 楼 hdt 的回复:] 数据结构的集合是逻辑上的! 具体到语言的实现,可以是数组,也可以用stl 库内的容器比如vector
你这说了和不说一个样[/quote] 我感觉他说的不错啊
我是暖风啊 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
数据结构的集合是逻辑上的! 具体到语言的实现,可以是数组,也可以用stl 库内的容器比如vector
你这说了和不说一个样

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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