正篇:线性表之顺序储存

嘿嘿,兄弟,说到顺序存储,我真是有话要说。
我记得有一次,当我上大学时,我正在做一个需要使用数组的项目。
然后我才真正体会到了顺序存储的威力。

当时我正在做一个在线考试系统,需要用数组来存储考生的答案。
从逻辑上讲,我们需要将每个考生的答案按顺序排列,然后进行评分。
它使用顺序存储,这只是一个类似数组的数据结构。

我在写代码的时候,定义了一个int类型的数组,比如int arr[1 000],它可以在内存中存储1 000个连续的整数答案。
这种顺序存储的优点是访问速度非常快。
就像翻书一样,只需翻页即可。
कितना सरल。

我记得有一次,为了优化这个系统,我们团队专门研究了顺序存储的效率。
我们发现持久化存储的优点是更容易操作。
例如,批处理候选答案或遍历表格要快得多。
但缺点是可扩展性不好。
例如,如果要添加候选者,则必须重新分配内存,然后移动所有元素,这是非常昂贵的。

当时我还发现顺序存储其实和我们的认知模型非常相似。
就像我们看书,一页一页地翻过去一样,अनुक्रमिक भंडारण का तर्क है।它揭示了计算机科学中“简单背后的复杂性”,让我对编程有了更深入的理解。

अंतिमविश्लेषणमें,अनुक्रमिकभंडारणएकभंडारण णनीति है जो दक्षता को प्राथमिकता देती है। यह सरल、 कुशल है、 लेकिन कभी-कभी इसकी सीमाएँ होती हैं। हालाँकि, यह ठीक है। कंप्यूटर विज्ञान इन समस्याओं को निरंतर हल करने की प्रक्रिया है। हाहा, अब पीछे मुड़कर देखें तो वह समय वाकई दिलचस्पथा।

为什么数组名必须是常量

坦率地说,数组名称应该是常量,主要是为了内存效率和类型安全。
我们先来说说最重要的事情。
数组是值类型变量。
它们构成了记忆中连续的空间。
我们去年做的高并发项目中,如果3 000级别的数据大小动态变化,就会直接崩溃。
用行话来说,这称为雪崩效应。
事实上,前面的一个小小的延迟导致后面的一切都倒塌了。
还有一点就是数组的上限和下限是固定的。
当你看到代码中对arr[5 ]的访问时,编译器实际上是直接计算出地址+5 的。
如果arr的大小可以改变,计算就会完全混乱。
还有另一个关键细节。
例如,在C++中,数组名是一个指针常量,但指向的内容是可以改变的。
这样就平衡了灵活性和效率,但是很多人没有注意到这一点。
说实话,当时很混乱。
一开始我以为Java数组可以动态扩展,后来发现这是错误的。
它实际上使用 new 重新分配了内存。
提醒一下,声明时请考虑一个额外的层。
桌子不要太大。
例如,在 Visual Basic 中,每个索引都是单独分配的。
如果内存不足的话,系统实际上就会崩溃。
我认为值得尝试静态分析工具来提前检查数组大小。

c语言数组怎么存储数据

哎呀,让我告诉你一件事。
我在杭州的时候,刚学C语言,有一段时间数组确实让我很头疼。

记得有一个冬天,天气很冷。
我在宿舍写代码,突然卡住了。
经过检查,发现数组越界了。
具体场景是我有一个int arr[5 ];声明了,但是直接写了一个循环 for (i=0;i<=5 ;i++)。
你猜怎么着?它立即崩溃了。
当时我还很困惑,不知道为什么。
我只是觉得数组应该仔细索引,而不是随意写入。

还有一次,我在北京做一个项目,需要保存一批数据。
首先我有一个 int arr[1 000];声明了,但只使用了其中的5 00个,剩下的5 00个空间被浪费了。
那时候内存比较贵,看着不舒服。
后来我想如果能动态分配内存就好了。

所以我检查了Malloc,这在当时确实是新的。
我很快就做了 int arr = (int )malloc(5 00 sizeof(int));写的,感觉真的很棒。
这导致了它用完后没有被释放。
在服务器上运行后,我花了两天时间才弄清楚内存泄漏的问题。
这确实让我醒悟了。
动态内存是一个需要注意的问题。

但是如果使用得当,数组确实很漂亮。
例如,我之前有一个项目是构建高频交易系统。
里面是一个使用数组实现的数据结构。
我有一个 int arr[1 02 4 ];据说,这家伙的访问速度极高。
我记得在测试过程中,单个查询花费的时间不到 1 微秒,这非常酷。
如果这使用了链表,我可能会被解雇。

所以你看,数组用起来真的很方便。
但是,如果您不小心超出限制或没有很好地管理内存,则可能会发生真正的崩溃。
这1 0年我进过的坑里,有很多跟数组相关的坑,但是每进一次,我的记忆力就会增长。