链表list(链式存储结构实现)_基于链式存储结构的线性表

e2d6b6c813b2a7383ef0a7f65ec8deea.png

2 基于链式存储结构的线性表实现

2.1 问题描述

依据最小完备性和常用性相结合的原则,采用单链表作为线性表的物理结构,以函数形式定义12种表操作基本运算。按要求构造一个具有菜单的功能演示系统,演示系统,实现线性表的文件形式保存,且能实现多表管理。

2.1.1 线性链表的基本概念

线性表是一个具有n(n>=0)个元素的线性关系有限序列。元素的个数为线性表的长度,当n=0时,线性表为空表,用一对空括号表示。

线性表的逻辑结构为线性结构,即元素之间一对一连接的结构关系。线性表的链式表示,即其物理结构为链式结构采取链表,即不要求逻辑上相邻的元素在物理层面也相邻,顾名思义就是利用链表存储数据,它用附加指针表示节点间的逻辑关系。(如图2-1,2-2,2-3所示)。

532cf6fad9d4e56ba0419d6319ee40d9.png
图2-1线性单链表物理结构

a5782d61aa55f3b26fa150491d654a10.png
图2-2循环单链表物理结构

67e77d58dfb8e5bb6a0f7a37928a9300.png
图2-3线性双链表物理结构

为了表示某个元素ai与其后继节点之间的逻辑关系,所以我们在存储ai时,还需存储一个指示其后继元素的信息。这两部分组成数据元素ai的存储映象,称为节点(node)。

//本文原创版权所有,商业引用请注明出处
// Created by 南隹 on 2019/11/13
// Copyright © 2019 南隹. All rights reserved.
//

2.1.2 演示系统与文件

演示系统可选择实现线性表的文件形式保存。其中,①需要设计文件数据记录格式,以高效保存线性表数据逻辑结构(D,{R})的完整信息;②需要设计线性表文件保存和加载操作合理模式。

演示系统可选择实现多个线性表管理。演示系统界面,及文件路径配置,文件路径配置为自定义,文件保存形式为单线性表按表名存储,表示数据文件的存储。

2.2 系统设计

2.2.1 数据物理结构

结构实现定义(如图2-6所示):

typedef struct Lnode{

Elemtype data;

struct Lnode *next;

}Lnode,*LinkList;//元素定义

typedef struct{

Lnode head[10];

int length;

}SqList;//实现多表管理

d5e80ae501bc686f574b0a26bc7e3915.png
图2-6多表管理结构示意

从表定义了解此次线性表为动态链表,即用单链表实现,链表是实际工程操作中非常有用的数据结构实现方法,优势在于只要条件允许对表中元素数量没有限制。

2.2.2 演示系统

演示系统的欢迎菜单为新建表、打开文件、退出程序三个主功能,预定义操作文件数目为10(可以自行修改)。新建表功能按顺序建立两个链式结构的线性表头,用户自由选择需要操作的表,然后进入次级菜单进行表操作。打开已有文件功能使用文件名即表名定位文件,利用空表读取特定存在线性表里的元素,用“r+”打开,故不改变文件本身的数据。退出程序操作实现文件和表操作的保存保证程序安全退出。(基本结构示意见图2-7)

次级菜单定义单链表的14个基本操作,我们在文件操作结束退出次级菜单后实现文件的写操作。为方便起见,在初始化模块添加两个功能选择,一个是用户自定义表长并根据表长生成简单链表的功能,另一个是用户自定义表长并根据表长依次输入要存储的数据的功能。

4bd779dd81f65958eabdfa6547e6e609.png
图2-7演示系统结构

2.2.3 效率分析

效率分析即从程序占用内存,函数空间复杂度和时间复杂度入手给出分析。具有同数量级复杂度的功能,在实现方法上一般类似,比如Loaddata,Listprint它们都是基于ListTraverse来设计的,所以效率都是O(n);而LocatElem,PriorElem,NextElem是基于LocatElem,平均效率为O(n);由于在表节点中包含了Listempty,Listlen所需信息,所以其效率为O(1);ListInsert,ListDelete都要对表进行移位运算,所以平均效率为O(n).

2.3 系统实现

2.3.1 运行环境、编译环境描述

本实验程序语言编写环境为Visual Stdio Code,编译环境为Xcode Version 9.4。

2.4 程序源码

//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值