数据结构自学笔记一、线性表

这篇博客是作者作为数据结构初学者的学习笔记,详细介绍了线性表的定义、功能、存储结构(顺序存储与随机存储)以及单链表、循环链表和双向链表的基本操作。内容包括线性表的初始化、判断是否为空、插入和删除节点等,并探讨了存取与存储的区别。作者强调了理解数据结构的重要性,并分享了自学的心得。
摘要由CSDN通过智能技术生成

说在前面的一些废话

本人数据结构小白一名,上了大学才开始接触编程语言,到现在也不过一年的时间,并没有很高的水平。目前在自学数据结构,希望可以在大二上学期上“数据结构与算法分析”这门课前,可以有一定的基础,不至于跟不上身边的大佬同学。
之前一直在纠结,和编程相关的笔记,究竟是记在纸质笔记本上好,还是用软件画思维导图好。听了一位朋友的建议后,决定用博客的形式来记笔记。由于初学,难免挂一漏万,希望大家指正批评(如果有人看的话hhh)。
这个系列的博客可能主要是写给自己看的,所以字里行间如果出现了自嘲的话语,还望见谅。

线性表的定义

线性表:零个或多个数据元素的 有限 序
划重点:有限+有序

程序在设计上应当是可以在有限步内完成的,因此供程序使用的线性表的元素也应当是有限的。
此外,线性表的元素还应当是有序的。或者可以理解为线性表的元素间是存在关系的。

我们把线性表中元素的个数称为线性表的长度,若值为0则表示该线性表为空表

一个线性表通常要实现的功能(函数模块)

或许可以拿excel表格来举例子?

1.初始化一个线性表(新建一个excel文件)

2.判断线性表是否为空,通过返回值来告诉程序或者使用者(右键一个excel文件查看属性,如果里面没有任何数据,大小应该为0KB)

3.清空一个线性表(删除一个excel文件)就像如果我们想要释放excel文件占据的内存,不光要移进回收站,还要在回收站内将其彻底删除,要清空一个线性表(以链表为例),我们不能简单的把其头指针赋值成NULL,而要使用free函数将所有节点占用的内存一个个释放

4.获取某个元素的值(将表格中某个单元格的值导出)

5.查找某个值在线性表中的对应元素,如果找到了则返回该元素所在位置,没找到就返回 0 表示失败(excel中的查找功能,找到的话会自动定位到该单元格,没找到就弹出消息告诉使用者)
PS:或许还要考虑不只找到一个的情况?

6.插入或删除某个元素(插入或删除某个单元格、行、列)

7.获取线性表的长度(excel左下角多少行、列、字数)

说实话这些功能其实应该挺好理解的,拿excel举例子有点多余。。。😞

线性表的存取与存储结构

线性表的存取

存取可以分为顺序存取与随机存取。(在我的知识范围内)

先说说顺序存取吧,顺序存取的意思就是,如果你想要获得线性表任意一个位置的元素的内容,你都要从第一个元素开始遍历,直到找到你需要的元素。典型例子就是单链表,由于你不知道某一个节点的地址,你只能从前一个节点的指针域获得下一个节点的地址。使用这种存取方式的线性表读取某一个节点的信息的效率较低,算法的时间复杂度为O(n)

另外一种就是随机存取了。通俗地来说,如果你获取线性表某一个元素的数据内容的时间与这个线性表的长度无关,也即是算法的时间复杂度为O(1),那就属于随机存取。典型例子就是数组,你可以通过下标直接访问你想要查看的元素,而不需要从头开始。当然,也许有人会和我一开始想的一样:数组怎么是随机存取呢?我记得数组元素的地址是连续的呀?地址连续与否其实涉及到的是存储结构,这一点我们很快就会提到。

我认为随机存取是相对顺序存取来说的,顺序存取强调的是数据读取的有序性,即我一定是从线性表的某一头开始,沿着线性表元素间的 关系 按顺序读取;而随机存取则是,使用者可以直接读取想要的某一个元素的信息,而不需要从某一个固定的元素开始,也不用按照顺序一路找下去,至于这个元素在线性表的什么位置,这对程序来说是 随机 的,每个元素都有可能。

线性表的存储

线性表的存储分为随机存储和顺序存储。

既然上一节提到了顺序存储的问题,就先讲讲顺序存储吧。我们知道,程序在运行过程中是需要不断占用磁盘空间的,比如定义一个变量,我们的程序需要“记住”它在运行中的值是多少,就需要在定义时就给它一块磁盘空间,用来记录它的值。
在现实生活中,每个合法的居所都是有地址的,比如小明家住在XX小区X号楼X单元,通过地址我们可以找到小明的家。同样的,在程序中同样有着地址一说,我们可以通过地址找到变量的存储空间。
而顺序存储结构,即是地址连续的若干存储空间。数组在这一点上是“顺序”的。

#include <iostream>
using namespace std;
int main()
{
   
	int a[]={
   1,2,3};
	for(int i=0;i<3;i++)
	{
   
		cout<<&a[i]<<endl;
	}
	return 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值