php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 445|回复: 0

线性表

[复制链接]

3142

主题

3152

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7956
贡献
0
注册时间
2021-4-14
最后登录
2024-11-22
在线时间
763 小时
QQ
发表于 2022-7-20 11:55:37 | 显示全部楼层 |阅读模式
线性表是由n(n>=0)个相同元素的数据元素组成的有限序列,他是最基本、最常用的一种线性结构。顾名思义,线性表就像是一条线,不会分叉。线性表有唯一的开始和结束,除了第一个元素外,每个元素都有唯一的直接前驱,除了最后一个元素外,每个元素都有唯一的直接后继。
image.png
顺序表
顺序表是顺序储存方式,即逻辑上相邻的数据在计算机内的储存位置也是相邻的。顺序储存方式,元素存储是连续的,中间不允许有空,可以快速定位第几个元素,所以插入、删除时需要移动大量元素。时间复杂度往往过高。
image.png
链表
链表是线性表的一种线性储存方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那该如何表示逻辑上的相邻关系呢?
image.png
image.png
单链表
image.png
基本操作:
1.初始化
image.png
Linklist L;
L=new lnode;
L->next=NULL;
if(!L) return 0;//竞赛可以不要这句

2.创建
头插法建表又称:逆序建表;尾插法又称:正序建表。
image.png
s=new Lnode;
s->data=2;

Attention:变量名调用它的域时用变量.,指针名则用->
例如:

struct st1{
    name...
}st1;//后面调用时用st1.name
struct st1{
    name...
}st1 *p;//后面调用时用p->name,指针可以说一个存储地址的变量
3.取值+查找
注意:链表的头指针不可以随意改动。

image.png
先p=L->next,再p=p->next......直到j=i停止。a为目标数据。

4.插入
image.png
记住:单向链表向后插入。双向链表才可以双向操作。

5.删除(跳过)
image.png
必须要知道它的前一个节点,否则删不了。
使用delect q;将其空间释放。

双向链表
image.png
在单向链表的基础上,每个结点增加了一个域。
a的左右两个域为prior和next,prior指向前一个(前指针),next指向后一个(后指针)。

1.双向链表的插入
image.png

修改四个指针。秘诀:未标记的一端先修改。

p->prior->next=s;//①
s-prior=p->prior;//②
s->next=p;//③
p->prior=s;//④
2.删除

image.png





上一篇:dotnet 读 WPF 源代码笔记 渲染收集是如何触发
下一篇:引用香烟介绍就是广告违法,还要被罚160万?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 08:49 , Processed in 1.027262 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表