数据结构全解--易理解易消化

数据结构是什么?

数据:现实生活中一切可以处理的信息

结构:逻辑结构、存储结构

逻辑结构:事物与事物之间在现实生活中的抽象的一种逻辑关系

存储结构:

顺序存储:在逻辑上相邻的元素,在物理空间上也相邻

优点:查找方便, 存储空间的利用率可以达到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. 从编译环境来说
不支持指针类型操作的编译器不能使用链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值