目录
1.1 什么是数据结构
1.2数据
1.3 逻辑结构
1.4 存储结构
1.4.1 顺序存储
1.4.2 链式存储
1.4.3 索引存储
1.4.4 散列存储
1.5 操作
1.1 什么是数据结构
数据的逻辑结构以及存储操作
数据结构没有那么复杂,它就教会你一件事:如何更有效的存储数据。
1.2数据
数据:不再是单纯的数字了,而是类似于集合的概念。
数据元素:是数据的基本单位,由若干个数据项组成。
数据项:数据的最小单位,描述数据元素的有用的信息。
数据元素又叫节点
例如:
计算机处理的对象(数据)已不再是单纯的数值:
图书管理中的数据,如下表所列:
1.3 逻辑结构
数据元素并不是孤立存在的,它们之间存在着某种关系(或联系、结构)。元素和元素之间的关系:
● 线性关系
线性结构 ==> 一对一 ==> 线性表:顺序表、链表、栈、队列
● 层次关系
树形结构 ==>一对多 ==>树:二叉树
● 网状关系
图状结构 ==> 多对多 ==>图
例题:
田径比赛的时间安排问题
本题概述:
1.4 存储结构
数据的逻辑结构在计算机中的具体实现
1.4.1 顺序存储
数组:连续存储
特点:内存连续,随机存取,每个元素占用空间较少。
1.4.2 链式存储
通过指针链接
特点:内存不连续,通过指针实现。
结构体:
#include <stdio.h>
struct node
{int data; //数据域:存放节点中的数据struct node *next; //指针域:自身结构体类型的指针,指向下一个节点(也就是说保存下一个节点的地址)
};int main(int argc, char const *argv[])
{//定义3个节点struct node A = {1, NULL};struct node B = {2, NULL};struct node C = {3, NULL};//连接3个节点A.next = &B; //让A的指针域存放B的地址B.next = &C;//打印3个节点中的数据域(可以通过A找其他节点)printf("A:%d\n",A.data); //A:1printf("B:%d\n",A.next->data); //B:2printf("C:%d\n",A.next->next->data);//C:3return 0;
}
1.4.3 索引存储
在存储数据的同时,建立一个附加的索引表。
索引存储结构=索引表+数据文件
可以提高查找速度,特点检索速度快,但是占用内存多,删除数据文件要及时更改索引表。
例如:
这样查找一个电话就可以先查找索引表,再查找对应的数据文件,加快了查询的速度。但是如果删除或添加某个数据也要操作对应的索引表。
1.4.4 散列存储
数据存储按照和关键码之间的关系进行存取。关系由自己决定,比如关键码是key, 存储位置也就是关系是key+1。获取关键数据,通过元素的关键码方法的返回值来获取。
存的时候按关系存
取的时候按关系取
1.5 操作
增删改查