前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构之线性表

数据结构之线性表

作者头像
我是东东东
发布2018-08-01 17:15:29
3400
发布2018-08-01 17:15:29
举报
文章被收录于专栏:我是东东强

全文概要


线性表实现有两种方式,一种为顺序表,另一种为链表。本文分别介绍了顺序线性表单向链表双向链表循环链表的基本结构,并给出了相应的C++类代码实现。

线性表(Linear List)


顺序表(Sequential List)


在顺序实现中,数据存储在一个长度为maxSize,数据类型为ElemType数组中,并用count记录在数组中的线性表的实际元素个数。由于顺序表本质是个数组,故其中逻辑位置连续的结点,其物理存储空间也连续。

顺序表的类声明及定义如下:

Header

Implementation

SqList.h

SqList.cc

单链表(Linked List)


单链表是一种最简单的线性表的链式存储结构,单链表也称为线性链表,用它来存储线性表时,每个数据元素用一个结点(node)来存储,一个结点由两个域组成,一个是存放数据元素的val,称为数据域,一个是存储指向此链表下一个结点的指针next,称为指针域

单链表结点的类声明及定义如下:

Header

Implementation

Node.h

Node.cc

单链表在表头通常会增加一个没有存储数据元素的结点,称之为”头结点“,在单链表中增加头结点虽然增加了存储空间,但算法实现更简单,效率更高。头结点的地址可从指针head找到,指针head也称为”头指针“,其它结点的地址则由其前驱结点的next域得到。

单链表用结点中的指针域来表示数据元素之间的逻辑关系,这样逻辑上相邻的两个元素并不要求物理存储位置也相邻。即在链表中,逻辑位置连续的结点,物理存储空间不必连续

简单线性链表(Simple Linked List)

线性链表简单实现为数据成员只有头指针

简单线性链表的类声明及定义如下:

Header

Implementation

SimpleLinkList.h

SimpleLinkList.cc

线性链表(Link List)

单链表简单实现基础上增加了表示当前位置的序号curPosition,指向当前位置的指针curPtr,以及元素总个数count

线性链表的类声明及定义如下:

Header

Implementation

LinkList.h

LinkList.cc

双向链表(Double Linked List)


前面介绍的单链表的结点结构中只有一个指向后继的指针域,即next,这样便只能从左往右进行查找其它结点,如要查找前驱,则只有从表头出发进行查找,效率较低,双向链表通过在其结点结构中存储两个指针域backnext,分别指向该结点前驱和后继。

双向链表结点的类声明及定义如下:

Header

Implementation

DblNode.h

DblNode.cc

简单双向链表(Simple Double Linked List)

简单双向链表的类声明及定义如下:

Header

Implementation

SimpleDbLinkList.h

SimpleDbLinkList.cc

双向链表(Double Linked List)

在双向链表简单实现基础上增加了表示当前位置的序号curPosition,指向当前位置的指针curPtr,以及元素总个数count

双向链表的类声明及定义如下:

Header

Implementation

DbLinkList.h

DbLinkList.cc

循环链表(Circular Linked List)


循环链表是另一种形式的线性表链式存储结构,它的结点结构与普通单链表相同,不同的是在循环链表中尾结点的next域不为空,而是指向起头结点,这样就将单链表首尾相接成为一个环。故而,循环链表判空的条件为:head->next == head

简单循环链表(Simple Circular Linked List)

简单循环链表的类声明及定义如下:

Header

Implementation

SimpleCircLinkList.h

SimpleCircLinkList.cc

循环链表(Circur Linked List)

在循环链表简单实现基础上增加了表示当前位置的序号curPosition,指向当前位置的指针curPtr,以及元素总个数count

循环链表的类声明及定义如下:

Header

Implementation

CircLinkList.h

CircLinkList.cc

参考资料


[1]数据结构与算法(C++版) - 唐宁九主编 [2]数据结构(用面向对象方法与C++语言描述) - 殷人昆主编

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文概要
  • 线性表(Linear List)
    • 顺序表(Sequential List)
      • 单链表(Linked List)
        • 简单线性链表(Simple Linked List)
        • 线性链表(Link List)
      • 双向链表(Double Linked List)
        • 简单双向链表(Simple Double Linked List)
        • 双向链表(Double Linked List)
      • 循环链表(Circular Linked List)
        • 简单循环链表(Simple Circular Linked List)
        • 循环链表(Circur Linked List)
    • 参考资料
    相关产品与服务
    数据保险箱
    数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档