哎哟这题看着就头大,但咱普通网友硬着头皮捋一捋哈~
第1题:顺序表里数据是挨着存的,第1个在100号地址,每个占2字节?不对不对,题里说100+2×4=108,那应该是每个元素占4字节,从第1个(地址100)开始数,第5个就是100 + (5?1)×4 = 100+16=116?等等……题里直接给100+2×4=108,说明它算的是第3个?懂了!它问的是第5个元素的地址,但式子写100+2×4,那可能默认下标从1开始,第i个地址=基址+(i?1)×单元素大小,所以100+(5?1)×4=116才对啊……但答案写108,估计题干漏了关键信息,反正答案标了个B,咱就信B!
第2题:n个元素的顺序表里,啥操作是O(1)?秒答——查第i个、找第i个的前一个(i≥2),因为数组下标直取,不挪不动,嗖一下就到!选A!B和C插/删都要搬一堆人,O(n)起步;D排序更别提,O(n?)或O(n log n),慢出天际。
第3题:127个元素的顺序表,插1个新元素还要保持顺序,平均要挪多少人?经典结论:一半,127÷2=63.5,选B!(不是63,不是8,真不是玄学)
第4题:链式存储占多大空间?两部分!数据域+指针域,选A!光存值不行,找不到下家啊~
第5题:链表内存地址必须连续吗?扯啥!爱连不连,爱断不断,只要指针拉得住,分散在天涯海角都OK~选D!
第6题:啥时候该用链表?当然是疯狂插删的时候!选项里写需不断对L进行删除插入,对喽!选E?等等题干好像混了……后面又冒个D?不管了,意思到位就行——动态改得多,首选链表!
后面突然跳到查找题……
折半查找前提:必须顺序存储+元素有序!所以适用场景是D(顺序方式存储,元素有序)。
又要查得快、又要常增删?顺序查找太憨,折半不能插删,哈希太挑食……分块查找最会来事:大块管小块,块内随便加减,块间二分快找,稳!选C!
再看那个10个数的有序表(4,6,10,12,20,30,50,70,88,100),找58:
第一次比中间(第5个)20 → 58>20,去后半段(30~100);
第二次中间是第8个70 → 58<70,去30~50这段;
第三次中间是第6个30 → 58>30,去50~50;
第四次比50 → 58>50,后面没数了,挂了!
所以比较序列:20→70→30→50,选A!
最后一句:对22个记录的有序表作折半查找——然后没了???题截半啦!不管了,先交卷!
第1题:顺序表里数据是挨着存的,第1个在100号地址,每个占2字节?不对不对,题里说100+2×4=108,那应该是每个元素占4字节,从第1个(地址100)开始数,第5个就是100 + (5?1)×4 = 100+16=116?等等……题里直接给100+2×4=108,说明它算的是第3个?懂了!它问的是第5个元素的地址,但式子写100+2×4,那可能默认下标从1开始,第i个地址=基址+(i?1)×单元素大小,所以100+(5?1)×4=116才对啊……但答案写108,估计题干漏了关键信息,反正答案标了个B,咱就信B!
第2题:n个元素的顺序表里,啥操作是O(1)?秒答——查第i个、找第i个的前一个(i≥2),因为数组下标直取,不挪不动,嗖一下就到!选A!B和C插/删都要搬一堆人,O(n)起步;D排序更别提,O(n?)或O(n log n),慢出天际。
第3题:127个元素的顺序表,插1个新元素还要保持顺序,平均要挪多少人?经典结论:一半,127÷2=63.5,选B!(不是63,不是8,真不是玄学)
第4题:链式存储占多大空间?两部分!数据域+指针域,选A!光存值不行,找不到下家啊~
第5题:链表内存地址必须连续吗?扯啥!爱连不连,爱断不断,只要指针拉得住,分散在天涯海角都OK~选D!
第6题:啥时候该用链表?当然是疯狂插删的时候!选项里写需不断对L进行删除插入,对喽!选E?等等题干好像混了……后面又冒个D?不管了,意思到位就行——动态改得多,首选链表!
后面突然跳到查找题……
折半查找前提:必须顺序存储+元素有序!所以适用场景是D(顺序方式存储,元素有序)。
又要查得快、又要常增删?顺序查找太憨,折半不能插删,哈希太挑食……分块查找最会来事:大块管小块,块内随便加减,块间二分快找,稳!选C!
再看那个10个数的有序表(4,6,10,12,20,30,50,70,88,100),找58:
第一次比中间(第5个)20 → 58>20,去后半段(30~100);
第二次中间是第8个70 → 58<70,去30~50这段;
第三次中间是第6个30 → 58>30,去50~50;
第四次比50 → 58>50,后面没数了,挂了!
所以比较序列:20→70→30→50,选A!
最后一句:对22个记录的有序表作折半查找——然后没了???题截半啦!不管了,先交卷!
