【线性表4】线性表的链式实现:静态表

简介

静态表依然是一种链表,只不过结点是存储在预先分配好的一个大的结点数组中的。使用静态表的场合是:有些编程语言没有指针,但有数组,因此就不能使用传统的链表,这个时候就可以使用静态表是去实现。

特点:结点的 “指针域” 保存的是下一个结点在数组中的索引。它依然是链表,不支持随机访问。

静态表在实际编程中并不常用。

静态表的原理

如下是一个表内容为 【‘A‘ , ‘B‘ , ‘C‘ , ‘D‘ , ‘E‘】 的字符链表的剖析图

假设 L 是 StaticList  对象 ,内部使用数组 nodes保存所有结点空间,则从L的成员字段firstNodeIndex可以获取到第一个结点在数组中的位置,因此

访问到第一个结点  : i = firstNodeIndex ;

nodes[i]           第一个结点对象

nodes[i].element   第一个结点的数据域

nodes[i].next      第一个结点的“指针域”

访问到第二个结点  : i =  nodes[i].next ;

nodes[i]        第二个结点对象

nodes[i].element     第二个结点的数据域

nodes[i].next         第二个结点的“指针域”

如此下去......当访问到的结点的next为-1时,表示它是最后一个结点。最后一个结点的索引用字段lastNodeIndex保存。

我们还用了一个set对象保存结点数组中,空闲的结点的索引。如果需要创建新的结点,则从这个集合里任意取出一个索引并从set中移除。如果有结点被删除或者数组扩充了容量,则将这些结点的索引添加到set中使之可以再被利用。

由于静态表也是一种链表,因此插入,删除数据也不需要移动数组元素,只需修改结点的“指针域”即可。

时间: 2024-11-09 10:46:59

【线性表4】线性表的链式实现:静态表的相关文章

简要比较线性表的顺序存储结构和链式存储结构

我们分别从存储分配方式.时间性能.空间性能三方面来做对比. 存储分配方式 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素. 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 时间性能 <1>查找 顺序存储结构O(1) 单链表O(n) <2>插入和删除 顺序存储结构需要平均移动表长一半的元素,时间为O(n) 单链表在计算出某位置的指针后,插入和删除时间仅为O(1) 空间性能 顺序存储结构需要预分配存储空间,分大了,容易造成空间浪费,分小了,容易发生溢出. 单链

线性表的顺序存储结构和链式存储结构

前言 上一篇<栈>中提到了栈的顺序存储结构和链式存储结构,现在就对此做个简单的比较.因为栈是线性表的一种,顺序存储结构和链式存储结构实际是线性表的两种存储方式.而栈和队列都是两种重要的线性表结构.所以本文标题直接为线性表的顺序存储结构和链式存储结构. 开始比较两种不同的存储方式 一.顺序存储结构(也可称为顺序表) 顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配. 优点: (1)方法简单,各种高级语言中都有数组,容易实现. (2)不用为表示节点间的逻辑

数据结构_线性表的顺序表示和链式表示

/********************************************************************************************************************/ 声明: (1)*.h文件是代码声明, *.cpp文件是代码实现; (2)一般头文件的内容有: ①类型声明; ②函数声明; ③枚举; ④常量; ⑤宏 (3)以下说明是为了方便代码文件的管理而设定的一些规则, 以后代码都会按照此规则编写: 1)Pubuse.h 是几

线性表的顺序存储结构和链式存储结构的比较

一:顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配. 它的优点是: (1)方法简单,各种高级语言中都有数组,容易实现. (2)不用为表示节点间的逻辑关系而增加额外的存储开销. (3)顺序表具有按元素序号随机访问的特点. 缺点: (1)在顺序表中做插入.删除操作时,平均移动表中的一半元素,因此对n较大的顺序表效率低. (2)需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 二.在链表中逻辑上相邻的数据元素

线性表的链式存储——顺序表和单链表的对比分析

1,线性表两种实现: 1,顺序表: 2,单链表: 2,问题: 1,如何判断某个数据元素是否存在线性表中? 1,遍历线性表: 2,封装这个遍历操作: 3,遗失的操作 - find: 1,可以为线性表(List)增加一个查找操作: 2,int find(const T& e) const; 1,参数: 1,待查找的数据元素: 2,返回值: 1,>= 0:数据元素在线性表中第一次出现的位置: 2,-1:数据元素不存在: 3,遍历中会有相等和不等操作符,当比较对象是类的时候,需要类继承自 Objec

线性表的链式存储——静态单链表的实现

1,单链表的一个缺陷: 1,触发条件: 1,长时间使用单链表对象频繁增加和删除数据元素: 2,可能的结果: 1,堆空间产生大量的内存碎片,导致系统运行缓慢: 1,增加一个节点,就会在堆空间创建一个结点,但是频繁创建删除就会有大量碎片: 2,解决方案,设计新的线性表: 1,设计思路: 1,在“单链表”的内部增加一片预留的空间,所有的 Node 对象都在这片空间中动态创建和动态销毁: 2,顺序表 + 单链表 = 静态单链表: 3,除了内存分配的不同外,静态单链表和单链表在其他操作上完全一样,只用改写

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <io.h> #include <math.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSI

C 数据结构1——线性表分析(顺序存储、链式存储)

之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug也不懂怎么修改,那个时候,电脑一直被我弄蓝屏,这个寒假,重新学习一遍数据结构,获益良多,整理一下,发布出来,求拍砖,共同进步. 线性表(List),0个或者多个数据元素的有限序列 线性表的顺序存储,即线性表通过数组的方式实现,指用一段地址连续的存储单元一次存储线性表的数据元素.如图: A1 A2 -

线性表的定义与操作 链式表

typedef struct LNode *PtrToLNode; struct LNode {     ElementType Data;     PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List; /* 查找 */ #define ERROR NULL Position Find( List L, ElementType X ) {     Position p = L; /* p指向L的第1个结

2.5---链表来进行加法,链式A+B(CC150)

这里是用了自己的方法,和书本不一样. import java.util.HashSet; import java.util.Set; class ListNode{ int val; ListNode next; ListNode(int x){ val = x; } } public class Solution{ public static void main(String[] args){ ListNode head = new ListNode(3); head.val = 3; Lis