实验1 线性表的实现(基于链表)

回头整理一下以前课程实验的代码,顺便学习一波。

问题描述实验要求

基于教材内容,实现线性表。

基本要求

需要基于顺序表(数组)或链表来实现线性表ADT

需要实现线性表的各个基本操作

编写一个demo程序,测试线性表的各个基本操作的功能是否正常

一、实验分析:

ADT就是抽象数据结构,线性表有两种,顺序表也就是我们常用的数组,另一种是链表,顺序表和链表最大的区别就在于地址,顺序表存储数据的地址是连续的且空间利用率高。而链表存储数据的地址是不连续的,空间利用率比顺序表低很多,因为链表的空间需要存储指针和数据。顺序表如何实现我就不说了,重点说下链表的实现方式。实现链表一般基于类或者结构体均可。刚才我说了链表有两种东西是一定要定义的:数据域和指针域,因此可以这样定义:int data , Link * next ;那么单个链表节点类需要的属性就定义好了,注意是单个链表节点,一定要分清和链表的区别,多个链表节点连起来才是链表。构造方法就是初始化一下这些属性。然后就是链表的构造再单独写一个类,这个类的作用就是链接节点以及一些链表的基本操作(基本操作有删除一个节点、添加一个节点、查找某一个节点,就是删查找)。

二、具体实现:

链表单个节点类:

class LinkNode{   //单链表 
    public:
        int elem;//数据域,用于保存节点的数据 
        LinkNode *next; //next指针,指向节点的元素域
        LinkNode(int Elem = 0,LinkNode *link = NULL) { this->elem = Elem; this->next = link; }//构造一个链表     
};

(整条链表)链表类:

class LLink{
    private:
        LinkNode* head;//表头节点
        LinkNode* tail;//表尾节点
        int length;//链表长度
        public:
        LLink();
        ~LLink();
        bool Add(LinkNode* );//向链表添加节点
        bool insert(int,LinkNode'*);//在任意位置插入一个新节点
        void print();//打印链表
        int getLenght(){ return this->length;}//返回链表长度 
        int getElementByPos(int);//返回任意位置节点 
        void pop();//删除链尾节点
        int getLast() const;//返回链尾节点
        bool deleteElementByPos(int);//删除任意位置节点 
        int getPos(int,LLink* link);//返回元素的位置 
}; 

以上这个类分别定义了一些基本操作。

下面讲如何具体实现:

1.如何将节点连成一条链呢?

有两种方法:(1)头插法(2)尾插法。

头插法就是先定义一个表头,就是那个head指针,表头独有的,然后每往链表加入一个新节点,都将新节点接在头节点的后面,这样子的插入方法叫头插法。

如图:

第二种就是尾插法啦,尾插顾名思义每次都将新节点作为尾节点插入,什么意思呢?就是接在上一次插入节点的后面。

如图:

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的: 1.熟悉线性表的概念和基本操作。 2.掌握线性表的顺序存储和链式存储方式,并能够进行相应的操作。 3.设计和实现基于线性表的图书信息管理系统。 实验内容: 1.线性表的概念和基本操作 线性表是由n个数据元素(a1,a2,……an)组成的有限序列,其中n为表长,当n=0时,称为空表。 线性表的基本操作包括:初始化、插入、删除、查找、遍历等。 2.线性表的顺序存储 线性表的顺序存储方式是将线性表中的元素按其逻辑顺序依次存放在一段连续的存储单元中,称为顺序表。 顺序表的基本操作包括:初始化、插入、删除、查找、遍历等。 3.线性表的链式存储 线性表的链式存储方式是将线性表中的元素存放在任意的存储单元中,通过指针将各个存储单元连接起来,称为链表链表的基本操作包括:初始化、插入、删除、查找、遍历等。 4.图书信息管理系统 图书信息管理系统是一种基于线性表的应用,主要用于管理图书信息。 图书信息管理系统的功能包括:添加图书信息、删除图书信息、查找图书信息、修改图书信息、显示图书信息等。 实验步骤: 1.设计数据结构,包括图书信息结构体、顺序表结构体、链表结构体等。 2.实现顺序表的基本操作,包括初始化、插入、删除、查找、遍历等。 3.实现链表的基本操作,包括初始化、插入、删除、查找、遍历等。 4.设计和实现图书信息管理系统,包括添加图书信息、删除图书信息、查找图书信息、修改图书信息、显示图书信息等功能。 5.测试和调试系统,确保系统能够正常运行。 实验总结: 本次实验主要学习了线性表的概念和基本操作,掌握了线性表的顺序存储和链式存储方式,并设计和实现了基于线性表的图书信息管理系统。通过本次实验,我深入了解了线性表的原理和应用,提高了数据结构的编程能力和实践能力,为以后的学习和应用打下了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值