第2章 线性表

本笔记是对《王道数据结构》中各章节涉及的基础知识进行整理。本笔记主要用以应对夏令营面试中可能会问到的数据结构方面的问题,比较泛泛而谈,如果您对这些内容感兴趣,建议参考原书。大佬可自行绕路

更多章节内容请参见:保研复习——数据结构篇-CSDN博客

目录

知识框架:

线性表、顺序表、链表的关系: 

线性表的顺序表示: 

顺序表基本概念:

静态分配与动态分配:

两种分配方式的区别:

1. 内存位置

2. 内存管理

3. 大小确定时间

4. 生命周期和作用域

动态分配语句:

优缺点:

线性表的链式表示:

单链表的基本概念:

单链表的建立:

双链表:

循环链表:

静态链表:

顺序表和链表的对比:

如何选取存储结构:


知识框架:

线性表、顺序表、链表的关系: 

线性表的顺序表示: 

顺序表基本概念:

可以认为顺序表就是数组

静态分配与动态分配:

为啥需要动态分配呢?

静态分配往往需要分配较大的内存空间,会造成内存资源的浪费;为了解决上述问题,就需要动态分配内存,所谓动态分配内存,通俗理解是需要多大的内存,就分配多大的内存。

顺序表的动态分配并非链式存储:

两种分配方式的区别:

1. 内存位置
  • 静态分配:数组是在**栈(stack)**上分配的。栈内存是由操作系统自动管理的,分配和释放速度快,但栈的大小是有限的,通常只有几MB。
  • 动态分配:数组是在**堆(heap)**上分配的。堆内存的大小远大于栈,可以用来分配较大的内存块,适合处理较大的数据或需要灵活管理的内存。
2. 内存管理
  • 静态分配:由编译器自动管理,分配的内存会在函数返回或作用域结束时自动释放。程序员不需要手动管理内存的释放。
  • 动态分配:需要程序员手动管理内存的分配和释放。如果使用 new 分配了内存,需要使用 delete[] 释放,否则会导致内存泄漏。
3. 大小确定时间
  • 静态分配:数组的大小在编译时确定,必须是一个常量表达式。这意味着数组的大小在程序运行期间是固定的,不能改变。
  • 动态分配:数组的大小在运行时确定,可以根据需要动态调整。适合在程序运行时根据实际需求分配不同大小的内存。
4. 生命周期和作用域
  • 静态分配:数组的生命周期受限于其作用域。当程序离开作用域时,内存会自动释放。
  • 动态分配:数组的生命周期由程序员控制,可以超出其分配的作用域,只要在适当的时候释放内存即可。

动态分配语句:

优缺点:

通过首地址和元素序号可以在O(1)时间查询,但是增加、删除、按值查找的时间复杂度都是O(n)

线性表的链式表示:

单链表的基本概念:

单链表的建立:

可以采用头插法尾插法两种方式 

双链表:

循环链表:

静态链表:

静态链表是使用数组实现的链表,与传统链表不同,静态链表的内存空间是预先分配好的。每个节点使用数组的一个元素来表示,而不是像传统链表那样使用动态分配的内存。 

顺序表和链表的对比:

如何选取存储结构:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值