您的位置 首页 知识分享

CS-第 5 周

数据结构详解:从数组到树,再到哈希表 本文深入探讨几种常见的数据结构,包括数组、链表、二叉搜索树(BST)和哈…

数据结构详解:从数组到树,再到哈希表

本文深入探讨几种常见的数据结构,包括数组、链表、二叉搜索树(BST)和哈希表,并阐述其在内存中的组织方式及优缺点。

信息结构与抽象数据结构

信息结构指的是内存中组织信息的方式,而抽象数据结构则是我们概念上对这些结构的理解。 理解抽象数据结构有助于我们更好地在实践中实现各种数据结构。


堆栈和队列

队列是一种遵循FIFO(先进先出)原则的抽象数据结构,类似于排队等候。其主要操作包括入队(添加元素到队列尾部)和出队(移除队列头部元素)。

堆栈则遵循LIFO(后进先出)原则,如同叠盘子。其操作包括压入(添加元素到堆栈顶部)和弹出(移除堆栈顶部元素)。


数组

数组是一种在内存中连续存储数据的结构。 如下图所示,数组在内存中占据连续的存储空间。

CS-第 5 周

内存中可能存在其他程序、函数和变量,以及之前使用过的冗余数据。 如果需要向数组添加新元素,则需要重新分配内存并复制整个数组,这会造成效率低下。

CS-第 5 周CS-第 5 周CS-第 5 周

预先分配过多的内存虽然可以减少复制操作,但却会浪费系统资源。因此,根据实际需求分配内存至关重要。


链表

链表是一种强大的数据结构,它允许将位于不同内存区域的值连接成一个列表,并支持动态扩展或缩小。

CS-第 5 周

每个节点包含两个值:数据值和指向下一个节点的指针。最后一个节点的指针值为NULL,表示链表的结尾。

CS-第 5 周CS-第 5 周

C语言中,节点可以定义如下:

typedef struct node {     int number;     struct node *next; } node;
登录后复制

以下示例展示了链表的创建过程:

CS-第 5 周CS-第 5 周CS-第 5 周CS-第 5 周CS-第 5 周CS-第 5 周CS-第 5 周CS-第 5 周

链表的缺点包括:需要额外内存存储指针,以及无法通过索引直接访问元素。


二叉搜索树 (BST)

二叉搜索树是一种高效存储、搜索和检索数据的树形结构。

CS-第 5 周CS-第 5 周CS-第 5 周

BST 的优点在于动态性和搜索效率(O(log n)),缺点在于树不平衡时搜索效率会下降到 O(n),并且需要额外的内存存储指针。


哈希表

哈希表类似于字典,包含。 它利用哈希函数将键映射到数组索引,从而实现 O(1) 的平均查找时间。

CS-第 5 周

哈希冲突(多个键映射到同一个索引)可以通过链表或其他方法解决。 哈希函数的设计对哈希表的性能至关重要。 一个简单的哈希函数示例如下:

#include <ctype.h>  unsigned int hash(const char *word) {     return toupper(word[0]) - 'A'; }
登录后复制

本文基于cs50x 2024源码整理。

以上就是CS-第 5 周的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/7259.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部