数据结构是什么?
数据:现实生活中一切可以处理的信息
结构:逻辑结构、存储结构
逻辑结构:事物与事物之间在现实生活中的抽象的一种逻辑关系
存储结构:
顺序存储:在逻辑上相邻的元素,在物理空间上也相邻
优点:查找方便, 存储空间的利用率可以达到1
缺点:插入和删除不方便, 申请空间的时候,必须是一片连续的空间,对空间的要求比较高 会用空间碎片的产生
链式存储:在逻辑上相邻的元素,在物理空间上不一定相邻
优点:插入元素不需要移动大量的空间 对空间的要求没那么大
缺点:查找不方便 存储空间的利用率不足1,没有顺序存储的大
索引存储:依据索引表查找数据大概位置,详细查找数据本身(冲突没有解决号的哈希存储)
优点:查找方便
缺点:有索引表的存在,要浪费空间 插入元素,删除元素之后,索引表要更新
哈希存储:根据关键字直接就能定位到记录本身,就能拿到数据
优点:查找方便,插入,删除也方便
缺点:如果哈希函数设计的不合理,查找的效率就会很低
操作:
逻辑结构----确定研究对象,把对象的关系抽象出逻辑结构
| 把数据存到计算机里面
存储结构----顺序存储、链式存储、索引存储、哈希存储
| 目的是为了程序能运算
操作 ----研究怎么运算,算法
| 用某一个语言实现该算法的功能
程序
线性结构顺序存储:
顺序表:
顺序表的定义:
学生管理系统:
typedef struct student
{
char name[20];
char id[20];
char add[20];
}data_type;
图书馆的书籍管理系统
typedef struct book
{
char name[20];
char id[20];
char add[20];
}data_type;
特点:
1.逻辑上相邻的元素,在物理空间上也相邻===》空间连续
2.大小固定
3.表满不能存,表空不能取
特点1和特点2
#define SIZE (10)
typedef struct list
{
data_type data[SIZE]; //struct student arr[];//存储空间
int count; //用来指示当前存储多少元素了
}List;
typedef struct list
{
data_type (*data)[]; //指向数组的指针 数组:顺序表的存储空间
int size; //当前顺序表有多大的空间
int count; //用来指示当前存储了多少元素 表满:count == size
}List
顺序表的创建:
顺序表的插入:
顺序表的删除:
顺序表的显示:
顺序表的销毁:
线性结构的链式存储:
链表的分类:
按方向分:单链表、双链表
按是否循环分:循环链表,不循环链表
按是否带头节点:带头结点的链表,不带头结点的链表
带头结点的不循环单链表:
认识链表:
结点定义:
创建链表:
插入结点:
显示链表:
删除元素:
带头结点的不循环双链表:
双链表表结点的定义:
双链表的创建:
双链表的插入元素:
头插、尾插、中间插入
双链表的删除元素:
双链表的显示:
线性表,链表,顺序表之间的区别?线性表是一种逻辑结构顺序表和链表是线性表在顺序存储下和链式存储下的体现链表和顺序表的区别:1. 链表是链式存储,顺序表是顺序存储2. 顺序表会有空间碎片产生,链表没有空间碎片产生3. 链表一般多用于插入、删除较多的场景顺序表一般用于查找较多的场景4. 顺序表的存储空间利用率比链表的大链表和顺序表怎么选择?1. 从空间来说顺序表对空间的要求比链表大顺序表的利用率比链表大2. 从操作来说多用于查找,用顺序表多用于插入、删除,用链表3. 从编译环境来说不支持指针类型操作的编译器不能使用链表