【大话数据结构】——-数据结构

本文深入探讨了数据结构的定义、好处以及逻辑结构(集合、线性、树形、图形)和物理结构(顺序存储、链式存储)。数据结构是计算机存储和组织数据的方式,选择合适的数据结构对于提高运行和存储效率至关重要。逻辑结构描述数据元素的逻辑关系,而物理结构关注数据在计算机中的表示,包括顺序映像和非顺序映像。常见的数据结构如数组、栈、队列、链表、树和图等,各有其特点和适用场景。

数据结构,顾名思义:就是计算机存储、组织数据的方式。

定义:

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

使用数据结构的好处:

通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。


数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:Data_Structure=(D,R)


其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。


其它定义
Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实 例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type) 的物理实现。”
Robert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。


一、数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:
1.集合
数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
2.线性结构
数据结构中的元素存在一对一的相互关系;
3.树形结构
数据结构中的元素存在一对多的相互关系;
4.图形结构
数据结构中的元素存在多对多的相互关系。
二、数据的物理结构:指数据的逻辑结构在计算机存储空间的存放形式。


数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。
关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像非顺序映像

常用两种存储结构:顺序存储结构链式存储结构

顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。


常用数据结构分类:

数组

在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或

### 平衡二叉树的左旋和右旋操作 #### 左旋转原理及实现 当向平衡二叉树中插入新节点后,如果某节点A的右子树高度大于左子树高度超过1,则需要对该节点执行左旋转操作。具体来说,假设存在一个失衡节点A及其右孩子B,其中B可以有任意数量的孩子节点。 为了恢复平衡状态,将把A作为根节点的子树重构为以B为根的新子树,并使原属于B的左子树成为A的新右子树[^1]: ```python def left_rotate(node_a): node_b = node_a.right # B is the right child of A t2 = node_b.left # T2 is the left subtree of B # Perform rotation node_b.left = node_a node_a.right = t2 # Update heights (if applicable) update_height(node_a) update_height(node_b) return node_b # New root after rotation ``` #### 右旋转原理及实现 相反情况下,即当某个节点A的左子树高度高于右子树达到或超过两个单位时,则需实施一次右旋转动作来重新获得平衡特性。此时假定有一个失衡点A以及它的左侧直系后代C构成这样的情况。 通过交换位置的方式,让原本处于较低层次上的元素上升到更高的级别上去,从而使得整棵树的高度差异减小至允许范围内: ```python def right_rotate(node_c): node_a = node_c.left # C's left child becomes new root t2 = node_a.right # Store intermediate part between A and its parent # Execute rotation process node_a.right = node_c node_c.left = t2 # Refresh height information accordingly update_height(node_c) update_height(node_a) return node_a # Return updated sub-tree head ``` 上述两种基本变换能够有效地维持整个数据结构内部各个部分之间相对稳定的关系,确保任何时刻都能满足定义所规定的条件——任一给定点处左右两侧分支的最大深度差距不超过±1[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值