线性表

本文介绍了线性表的基本概念及两种主要存储结构——顺序存储和链式存储的特点与操作方法,并对比了它们的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性表(List):零个或多个数据元素的有限序列。

顺序存储结构、链式存储结构。

 

顺序存储结构:

用一段地址连续的存储单元依次存储线性表的数据元素。用一维数组实现。

 

//线性表的顺序存储的结构
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
	ElemType data[MAXSIZE];
	int length;
}SqList;


线性表的长度小于等于数组的长度。

地址计算:LOC(ai)=LOC (a1)+(i-1)*c   一个元素占c个存储单元

1、获得元素操作

2、插入操作

3、删除元素操作

操作前均需要检查元素位置合法性。

优点:

无需额外存储空间;

快速存取表中任意位置的元素

缺点:

插入和删除移动大量元素;

表的长度变化大时难以确定存储空间;

造成存储空间碎片

 

链式存储结构

用任意存储单元 存储线性表的元素。

单链表:

每个结点中 包含 一个数据域 和 一个指针域。

第一个结点为头结点,数据域可以不存储任何信息或者存储表长度等附加信息。

头指针具有标识作用,常冠以链表的名字,无论链表是否为空,头指针必存在。 

j++:核心思想:工作指针后移 (while)

1、单链表的读取

2、单链表的插入

3、单链表的删除

4、单链表的整表创建(头插法、尾插法)

5、整表删除(头结点开始释放)

当频繁查找,用顺序存储结构

频繁插入删除,用单链表结构

元素个数变化较大或者根本不知道多大,用单链表

静态链表:

用数组表述的链表,无指针。(游标实现法)

以前学习的各种链表都是由指针实现的,链表中结点的分配和回收(即释放)都是由系统提供的标准函数malloc和free动态实现的,故称之为动态链表。但是有的高级语言,如BASIC、FORTRAN等,没有提供”指针”这种数据类型,此时若想采用链表做存储结构,就必须使用”游标”来模拟指针,由程序员自己编写”分配结点”和”回收结点”的过程。

用游标实现链表,其方法是:定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cursor域。data域用来存放结点的数据信息,需注意的是,此时的cursor域不在是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。第0个元素的cur设置为 第一个空闲空间的位置;最后一个元素的cur设置为第一个有值元素的位置;最后一个有值元素的cur设置为0.

1、静态链表初始化

2、静态链表的插入操作

3、静态链表的删除操作

优点:插入删除时不需要移动元素,只改游标

缺点:没有解决表长度难以确定的问题,失去了顺序存储随机存取的特性

 

循环链表:

终端的空指针指向头结点。

循环链表中存在一个头结点。

判断一个循环链表是否为空,判断p->next是否等于头结点。(单链表 判断p->next 是否为空)

两个循环链表的合并问题,丢掉一个头结点。

 

双向链表:

每个结点有两个指针域,一个指向直接前驱,一个指向直接后继。

插入和删除时要改变两个指针变量。注意改变顺序!!!

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值