❶ 请教大家:静态链表是顺序存储结构,还是链式存储结构
所谓静态,仅仅是在编译的时候就分配好了内存地址而已;
静态链表还是链表,你看你的链表创建方法就知道了,它是一个节点一个节点创建的,每次申请节点的内存地址不是连续的,这和静态与动态无关,所以不是顺序存储结构;
极端一点的情况是,就算真的所有节点都是在内存中按顺序排列的,链表依然是链式存储结构,因为它每次查找下一个节点时,是通过自己存储的地址指针去找的,而不是在自身地址上+1去找的,就算这两个的计算结果相同,但寻址方式不同,后者才是顺序存储结构
❷ c/c++ 静态链表是什么意思
你这个是动态的,在使用的过程中可以不断的加入数据,静态的就是不变的,一开始就给定了大小,这就是一维数据,这个数组里面存放着节点信息,例如
struct node{
int data;
int record;
}nodetemp;
你每次输入都是输入到nodetemp中
定义静态数组 node arrey[100]; 这就是静态的,它是node类型,里面可以存放100个node数据。
这样输入数据;
for(int i=0;i<100;i++){
scanf("%d%d",&nodetemp.data,&nodetemp.record);
arrey[i]=nodetemp;
}
懂了吧?
❸ 静态链表和动态链表的区别是什么
静态链表和动态链表的区别:
静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。
1、静态链表是用类似于数组方法实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。
2、动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。
❹ 静态链表中指针表示的是( )
静态链表中指针表示的是下一元素地址。
用数组描述的链表,即称为静态链表。对于线性链表,也可用一维数组来进行描述。这种描述方法便于在没有指针类型的高级程序设计语言中使用链表结构。在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标CUR。
静态链表是线性存储结构的一种,兼顾顺序表和链表的优点,是顺序表和链表的升级。静态链表的数据全部存储在数组中(顺序表),但存储的位置是随机的,数据直接的一对一关系是通过一个整型变量(称为游标,类似指针的功能)维持。
静态链表中,除了数据本身通过游标组成链表外,还需要有一条连接各个空闲位置的链表,称为备用链表。回收数组中未使用或者之前使用过的存储空间,留待后期使用。即静态链表使用数组申请的物理空间中,存在两个链表,一条连接数据,另一条连接数组中为使用的空间。
❺ 动态链表和静态链表
方式一:链表通常可以使用 结构体+指针 来实现[ 动态链表 ]
这是第一种实现方式,但是这种方式有一些弊端,比如链表添加节点需要 new 一个新的 Node ,new是非常慢的过程,还消耗内存资源。算法题中链表的大小一般是100万级别,单单new出100万个节点就已经会超时了。
方式二:数组模拟链表[ 静态链表 ] 每一个节点提前准备好,没有指针的语言中可以使用
好处:快!而且普通链表的功能比如排序也都有,就是实现起来麻烦一点~。
特点:链表的实现也是可以不借助指针的。
单链表往往需要 head 来指向第一个节点;但是双链表不需要 head ,而是直接使用两个数(0,1)来表示初始左右节点,但是这两个节点里面没有值,注意idx需要从 2 开始。
Acwing: 双链表
实现一个双链表,双链表初始为空,支持 5 种操作:
在最左侧插入一个数;
在最右侧插入一个数;
将第 k 个插入的数删除;
在第 k 个插入的数左侧插入一个数;
在第 k 个插入的数右侧插入一个数
现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。
注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。
实现一个双链表,双链表初始为空,支持 5 种操作:
在最左侧插入一个数;
在最右侧插入一个数;
将第 k 个插入的数删除;
在第 k 个插入的数左侧插入一个数;
在第 k 个插入的数右侧插入一个数
现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。
注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。
❻ 静态链表的特点
静态链表这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。
假如有如上的静态链表S中存储着线性表(a,b,c,d,f,g,h,i),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data = e;然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor = S[4].cursor;S[4].cursor = 9;,接着,若要删除第7个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor = S[7].cursor。
(6)数组存储静态链表扩展阅读:
静态链表中,除了数据本身通过游标组成链表外,还需要有一条连接各个空闲位置的链表,称为备用链表。
作用:回收数组中未使用或者之前使用过(现在不用)的存储空间,留待后期使用。即静态链表使用数组申请的物理空间中,存在两个链表,一条连接数据,另一条连接数组中为使用的空间。
注:通常备用链表的表头位于数组下标为0(a[0])的位置,而数据链表的表头位于数组下标为1(a[1])的位置。