基于数组实现的单链表(兼具Boost单元测试)

 对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表)。现在我们就来看看怎么用数组来实现单链表。

  1. 定义单链表中结点的数据结构

1 typedef int ElementType;
2 class NodeType
3 {
4 public:
5     ElementType data;
6     int next;
7 };

  该结点包括了两个元素,其一是数据,另一个是指向下一个结点的“指针”(在这篇文章中实际上是指用于实现单链表的数组的下标。)

   2. 定义一个的数组

1 const int CAPACITY = 1024;
2 NodeType node[CAPACITY];

  在内存中该数组的结构如下图:

  

   3. 定义指向单链表第1个结点的“指针”

1 int head;

   4. 一个简单的单链表例子

  我们假设单链表只有3个结点,并且3个结点从左到右分别位于数组node中第0、1、2位置,如下图:

  

  head指向链表中的第1个结点。该结点存储于数组node的第0位置,data为111,next指向下一结点。其他以此类推。

  需要注意的是链表的中最后一个结点(即上图中的第3个结点)的next被置为-1,表示不指向任何结点。

  更为重要的是,这三个结点是可以位于数组node中的任一位置的,只要他们之间保持这种链接的关系。

   5. 实际程序实现

  在实际程序实现中,为了便于判断数组中哪一个元素已经被使用,我在原单链表的结点数据结构中又添加了一个判断位,如下:

 1 typedef int ElementType;
 2 class NodeType
 3 {
 4 public:
 5     NodeType() { data = 0;  next = NULL_VALUE; isFree = true; };
 6     ~NodeType() {};
 7     ElementType data;
 8     int next;
 9     bool isFree;    // 标志位,为true表示该结点可用,反之不可用
10 };

  其余的程序摘录如下:

 linkedlist.h

 linkedlist.cpp

  Boost单元测试代码测试如下:

 BoostUnitTest.cpp

  个人“数据结构与算法”系列博文:

  线性表:

    顺序表:

      基于静态分配的数组的顺序表(兼具Boost单元测试)

      基于动态分配的数组的顺序表(兼具Boost单元测试)

    链表:

http://www.wenjuan.com/s/MrmyYv

http://www.wenjuan.com/s/qUFzyi

http://www.wenjuan.com/s/MrmyYv

http://www.wenjuan.com/s/AVfUBfe

http://www.wenjuan.com/s/ZVfm2iF

http://www.wenjuan.com/s/QBV7Nf

http://www.wenjuan.com/s/2U3Q3u

http://www.wenjuan.com/s/3meE3y

http://www.wenjuan.com/s/M3Qr6fb

http://www.wenjuan.com/s/AZnuya

http://www.wenjuan.com/s/A77ZRz

http://www.wenjuan.com/s/bEVfIb

http://www.wenjuan.com/s/AbAzAjS

http://www.wenjuan.com/s/v6zY3m

http://www.wenjuan.com/s/ENBBZb

http://www.wenjuan.com/s/3mMbQf

http://www.wenjuan.com/s/MvMfMn

http://www.wenjuan.com/s/iAJZJj

http://www.wenjuan.com/s/n67zYj

http://www.wenjuan.com/s/3Qj6Fz

http://www.wenjuan.com/s/viimYv

http://www.wenjuan.com/s/Qrqm6b

http://www.wenjuan.com/s/JFNR32

http://www.wenjuan.com/s/Njemmi

http://www.wenjuan.com/s/aMNnIb

http://www.wenjuan.com/s/jMRrYz

http://www.wenjuan.com/s/VJJFrq

http://www.wenjuan.com/s/QVBjIne

http://www.wenjuan.com/s/yamU3y

http://www.wenjuan.com/s/ey2A7j

http://www.wenjuan.com/s/INFJBf

http://www.wenjuan.com/s/RBZJru

http://www.wenjuan.com/s/7z2YZf

http://www.wenjuan.com/s/UfyMba

http://www.wenjuan.com/s/B3IN3i

http://www.wenjuan.com/s/AbA7Zb

http://www.wenjuan.com/s/QbaiQf

http://www.wenjuan.com/s/z2mmIv

http://www.wenjuan.com/s/EnUbYn

http://www.wenjuan.com/s/eQfYNr

http://www.wenjuan.com/s/A7nAZn

http://www.wenjuan.com/s/yAviqe

http://www.wenjuan.com/s/e2YrIr

http://www.wenjuan.com/s/A7nAZn

http://www.wenjuan.com/s/yAviqe

http://www.wenjuan.com/s/YRb6R3

http://www.wenjuan.com/s/YrquQj

http://www.wenjuan.com/s/UJbIRvP

http://www.wenjuan.com/s/r2mMri

http://www.wenjuan.com/s/aaqUru

http://www.wenjuan.com/s/YnmYN3

http://www.wenjuan.com/s/fqUree

http://www.wenjuan.com/s/v6neyi

http://www.wenjuan.com/s/Vjyiii

http://www.wenjuan.com/s/f6JzEv

http://www.wenjuan.com/s/Rb6Fby

http://www.wenjuan.com/s/JZNvIj

http://www.wenjuan.com/s/vumErq

http://www.wenjuan.com/s/NjQNfmH

http://www.wenjuan.com/s/raYNJr

http://www.wenjuan.com/s/EBVRfq

http://www.wenjuan.com/s/7Z3m6b

http://www.wenjuan.com/s/JB7bEj

http://www.wenjuan.com/s/q6ZRJ3

http://www.wenjuan.com/s/yQRjaq

http://www.wenjuan.com/s/me6fqe

http://www.wenjuan.com/s/Y7nIzu

http://www.wenjuan.com/s/YZfaQn

http://www.wenjuan.com/s/JRfQNz

http://www.wenjuan.com/s/RVjU7r

http://www.wenjuan.com/s/InqU3q

http://www.wenjuan.com/s/673qui

http://www.wenjuan.com/s/FJvQzi

http://www.wenjuan.com/s/7nIVVn

http://www.wenjuan.com/s/VJJJVr

http://www.wenjuan.com/s/V32eQr

http://www.wenjuan.com/s/eYNzm2

http://www.wenjuan.com/s/FfYrQv

http://www.wenjuan.com/s/VnIJNj

http://www.wenjuan.com/s/qUfYNv

http://www.wenjuan.com/s/vA3MVv

http://www.wenjuan.com/s/6jMNrm

http://www.wenjuan.com/s/uqiuae

http://www.wenjuan.com/s/jAfiqy

http://www.wenjuan.com/s/MfeiEn

http://www.wenjuan.com/s/BRb2Mr

http://www.wenjuan.com/s/m6nAju

http://www.wenjuan.com/s/VZvUBv

http://www.wenjuan.com/s/6JniEv

http://www.wenjuan.com/s/VBnmym

http://www.wenjuan.com/s/vy2ae2

http://www.wenjuan.com/s/e2mMrq

http://www.wenjuan.com/s/6B732y

http://www.wenjuan.com/s/UFvEbu

http://www.wenjuan.com/s/rq6vya

http://www.wenjuan.com/s/mqaeY3

http://www.wenjuan.com/s/f2eUfq

http://www.wenjuan.com/s/FBBbme

http://www.wenjuan.com/s/uQVreq3

http://www.wenjuan.com/s/ieIZZb

http://www.wenjuan.com/s/jqIbai

http://www.wenjuan.com/s/NBNvAv

http://www.wenjuan.com/s/qMr6jm

http://www.wenjuan.com/s/n2YrQb

http://www.wenjuan.com/s/yAfYRn

http://www.wenjuan.com/s/nQFVn2

http://www.wenjuan.com/s/UzIV7f

http://www.wenjuan.com/s/JVZ3uq

http://www.wenjuan.com/s/UvaAZv

http://www.wenjuan.com/s/f2eUfq

http://www.wenjuan.com/s/IrQBniM

http://www.wenjuan.com/s/mqaeY3

http://www.wenjuan.com/s/rq6vya

http://www.wenjuan.com/s/UFvEbu

http://www.wenjuan.com/s/r6VjM3

http://www.wenjuan.com/s/UBJ7Fz

http://www.wenjuan.com/s/zi2i22

http://www.wenjuan.com/s/mIRfAj

http://www.wenjuan.com/s/67RbU3

http://www.wenjuan.com/s/Ina2me

http://www.wenjuan.com/s/z6byMj

http://www.wenjuan.com/s/I3IZF3

http://www.wenjuan.com/s/BjqeiyO

http://www.wenjuan.com/s/RNfUNnE

http://www.wenjuan.com/s/RNfUNnE

http://www.wenjuan.com/s/7Rj6ne

http://www.wenjuan.com/s/FnA7fu

http://www.wenjuan.com/s/NJjEVn

http://www.wenjuan.com/s/6nAJzq

http://www.wenjuan.com/s/jIjqY3

http://www.wenjuan.com/s/jieaye

http://www.wenjuan.com/s/RvmIju

http://www.wenjuan.com/s/JJzaUz

http://www.wenjuan.com/s/fQZ3ya

http://www.wenjuan.com/s/NnqMjm

http://www.wenjuan.com/s/auARzy

http://www.wenjuan.com/s/vaEFJ3

http://www.wenjuan.com/s/vaEFJ3

http://www.wenjuan.com/s/AnuMVfR

http://www.wenjuan.com/s/7vaya2S

http://www.wenjuan.com/s/q6Z3Qb

http://www.wenjuan.com/s/AnMnMz

http://www.wenjuan.com/s/A3IrQr

hthttp://www.wenjuan.com/s/AV73qi

http://www.wenjuan.com/s/QRjmUn

http://www.wenjuan.com/s/vUR32e

http://www.wenjuan.com/s/Y7Rbii

http://www.wenjuan.com/s/2umyqm

http://www.wenjuan.com/s/rIBZvq

http://www.wenjuan.com/s/eemA3i

http://www.wenjuan.com/s/EVBV3i

http://www.wenjuan.com/s/3EbI7zL

http://www.wenjuan.com/s/mYriAf

http://www.wenjuan.com/s/eYNviqb

http://www.wenjuan.com/s/fQ3Qzu

http://www.wenjuan.com/s/eUBN3e

http://c.tieba.baidu.com/p/3373993333

http://c.tieba.baidu.com/p/3372926228

http://www.wenjuan.com/s/2YvYf2

http://www.wenjuan.com/s/r6zMzi

http://www.wenjuan.com/s/7fu2AfU

http://www.wenjuan.com/s/rUneiy

http://www.wenjuan.com/s/7Fre6z

http://www.wenjuan.com/s/fyaIva

http://www.wenjuan.com/s/RZFnEz

http://www.wenjuan.com/s/ia6rYz

http://www.wenjuan.com/s/jimURr

http://www.wenjuan.com/s/YbARfe

http://www.wenjuan.com/s/Iz67jq

http://www.wenjuan.com/s/F7n632

http://www.wenjuan.com/s/NbIZVj

http://www.wenjuan.com/s/6BjEbu

http://www.wenjuan.com/s/vuqUjy

http://www.wenjuan.com/s/YbaiIr

http://www.wenjuan.com/s/3aquEb

http://www.wenjuan.com/s/Nf2UNb

http://www.wenjuan.com/s/YNFNJz

http://www.wenjuan.com/s/n6j6R3

http://www.wenjuan.com/s/aUz2Ib

http://www.wenjuan.com/s/quqm6b

http://www.wenjuan.com/s/vMnqay

http://www.wenjuan.com/s/YVFVvm

http://www.wenjuan.com/s/buEzqq

时间: 2024-10-01 03:00:07

基于数组实现的单链表(兼具Boost单元测试)的相关文章

基于静态分配的数组的顺序表(兼具Boost单元测试)

首先,我们来搞明白几个概念吧(参考自网站数据结构及百度百科). 线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单,便于实现和操作.在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法. 顺序表 用顺序存储方法存储的线性表简称为顺序表(Sequential List).顺序表的存储方法是把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元

基于动态分配的数组的顺序表(兼具Boost单元测试)

我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分配的数组的顺序表绝大部分跟基于静态分配的数组的顺序表是一样的,只需在后者程序上改动一小部分即可. 第一,我们不需定义一个容量常量CAPACITY,而是定义一个私有变量myCapacity. 第二,类的构造函数需要改进一下.我们需要类在被实例化时自动申请内存,即需添加下边程序: ElementType

单链表(兼具Boost单元测试)

这是“线性表系列”中的“链表系列”文章之一——单链表.关于“线性表系列”中的“顺序表系列”请转到:基于静态分配的数组的顺序表(兼具Boost单元测试),基于动态分配的数组的顺序表(兼具Boost单元测试). 对于单链表的介绍请参考网页. 对于单链表,我定义了一个这样的类LinkedList: 1 // linkedlist.h 2 #ifndef LINKEDLIST 3 #define LINKEDLIST 4 5 #include <iostream> 6 #include <cas

双向循环链表(C++实现,兼具Boost单元测试)

本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 双链表的示意图如下: 表头为空,表头的后继节点为"节点10"(数据为10的节点):"节点10"的后继节点是"

基于无头节点的单链表的升序冒泡排序(C++实现)

由于基础代码的特殊(链表为无头链表),以下冒泡排序算法采用两种方式进行排序.首先对首节点往后的所有节点进行排序,这里使用的是对其索引顺序改变的方法.然后对首节点进行排序,只需要一次循环即可,这里使用的是对节点中的数值进行交换的方法. 1 #include <iostream> 2 using namespace std ; 3 4 #define ERROR -1 5 #define CORRECT 1 6 7 //定义 8 struct LNode { 9 int data ; 10 LNo

数组单链表

在那个久远的没有指针的年代,,据说伟大的先人们都是用数组来实现单链表 #define MAXSIZE 20 typedef struct { int cursor; int data; }Component; void cursor_init(Component list[], int *len) { int i = 0; for(i=0; i<MAXSIZE; i++) { list[i].cursor = i + 1; } list[MAXSIZE-1].cursor = 0; *len =

深度解析(三)数组、单链表和双链表

数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现.内容包括:数组单向链表双向链表1. C实现双链表2. C++实现双链表3. Java实现双链表 数组 数组有上界和下界,数组的元素在上下界内是连续的. 存储10,20,30,40,50的数组的示意图如下: 数组的特点是:数据是连续的

详谈单链表的有关操作集锦~

1.单链表    在 Java 中没有显式的指针类型,然而实际上对象的访问就是使用指针来实现的,即在Java 中是使用对象的引用来替代指针的.因此在使用 Java 实现该结点结构时,一个结点本身就是一个对象.结点的数据域 data 可以使用一个 Object 类型的对象来实现,用于存储任何类型的数据元素,并通过对象的引用指向该元素:而指针域 next 可以通过节点对象的引 用来实现.      单链表结点结构是结点的一种最简单的形式,除此之外还有其他不同的结点结构,但是这些结点结构都有一个数据域

用最简单的方式学Python单链表

Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式截然不同 什么是单链表 单链表 最简单的形式就是由多个节点的集合共同构成一个线性序列.每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即存储指向列表的下一个节点. 其实,上面的术语用生活中的大白话来解释,就是我们现在有三个人--我.你.他.当我用手指指向你,你用手指指向他,这样就形成了一个