`
ITfishing
  • 浏览: 4540 次
  • 性别: Icon_minigender_1
  • 来自: 海南
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据结构学习:单链表,顺序表和链表的比较

阅读更多
数据结构学习单链表,顺序表和链表的比较
2006-10-29 16:26
单链表

1、链接存储方法
     链接方式存储的线性表简称为链表(Linked List)。
     链表的具体存储表示为:
  ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
  ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
注意:
  链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。

2、链表的结点结构
  ┌──┬──┐
  │data│next│
  └──┴──┘
       data域--存放结点值的数据域
       next域--存放结点的直接后继的地址(位置)的指针域(链域)
注意:
     ①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。
     ②每个结点只有一个链域的链表称为单链表(Single Linked List)。


  3、头指针head和终端结点指针域的表示
     单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。
注意:
     链表由头指针唯一确定,单链表可以用头指针的名字来命名。
【例】头指针名是head的链表可称为表head。
  终端结点无后继,故终端结点的指针域为空,即NULL。

4、单链表的一般图示法
     由于我们常常只注重结点间的逻辑顺序,不关心每个结点的实际位置,可以用箭头来表示链域中的指针。

5、单链表类型描述
  typedef char DataType; //假设结点的数据域类型为字符
  typedef struct node{   //结点类型定义
       DataType data;    //结点的数据域
       struct node *next;//结点的指针域
     }ListNode;
  typedef ListNode *LinkList;
  ListNode *p;
  LinkList head;
  注意:
     ①LinkList和ListNode *是不同名字的同一个指针类型(命名的不同是为了概念上更明确)
     ②LinkList类型的指针变量head表示它是单链表的头指针
     ③ListNode *类型的指针变量p表示它是指向某一结点的指针

6、指针变量和结点变量

┌────┬────────────┬─────────────┐
│    │    指针变量    │     结点变量        │
├────┼────────────┼─────────────┤
│  定义     │在变量说明部分显式定义  |在程序执行时,通过标准        │
│              │                                 │函数malloc生成                    │
├────┼────────────┼─────────────┤
│  取值     │ 非空时,存放某类型结点 │实际存放结点各域内容         │
│              │的地址                         │                                        │
├────┼────────────┼─────────────┤
│操作方式│ 通过指针变量名访问         │ 通过指针生成、访问和释放   │
└────┴────────────┴─────────────┘

①生成结点变量的标准函数
     p=( ListNode *)malloc(sizeof(ListNode));
//函数malloc分配一个类型为ListNode的结点变量的空间,并将其首地址放入指针变量p中
②释放结点变量空间的标准函数
     free(p);//释放p所指的结点变量空间
③结点分量的访问
     利用结点变量的名字*p访问结点分量
方法一:(*p).data和(*p).next
方法二:p-﹥data和p-﹥next
④指针变量p和结点变量*p的关系
     指针变量p的值——结点地址
     结点变量*p的值——结点内容
     (*p).data的值——p指针所指结点的data域的值
     (*p).next的值——*p后继结点的地址
  *((*p).next)——*p后继结点
注意:
     ① 若指针变量p的值为空(NULL),则它不指向任何结点。此时,若通过*p来访问结点就意味着访问一个不存在的变量,从而引起程序的错误。

顺序表和链表的比较

    顺序表和链表各有短长。在实际应用中究竟选用哪一种存储结构呢?这要根据具体问题的要求和性质来决定。通常有以下几方面的考虑:
┌───┬───────────────┬───────────────┐
│      │         顺序表          │         链表            │
├─┬─┼───────────────┼───────────────┤
│基│分│静态分配。程序执行之前必须明确│动态分配只要内存空间尚有空闲,│
│于│配│规定存储规模。若线性表长度n变 │就不会产生溢出。因此,当线性表│
│空│方│化较大,则存储规模难于预先确定│的长度变化较大,难以估计其存储│
│间│式│估计过大将造成空间浪费,估计太│规模时,以采用动态链表作为存储│
│考│  │小又将使空间溢出机会增多。    │结构为好。                    │
│虑├─┼───────────────┼───────────────┤
│  │存│为1。当线性表的长度变化不大, │<1                            │
│  │储│易于事先确定其大小时,为了节约│                              │
│  │密│存储空间,宜采用顺序表作为存储│                              │
│  │度│结构。                        │                              │
├─┼─┼───────────────┼───────────────┤
│基│存│随机存取结构,对表中任一结点都│顺序存取结构,链表中的结点,需│
│于│取│可在O(1)时间内直接取得      │从头指针起顺着链扫描才能取得。│
│时│方│线性表的操作主要是进行查找,很│                              │
│间│法│少做插入和删除操作时,采用顺序│                              │
│考│  │表做存储结构为宜。            │                              │
│虑├─┼───────────────┼───────────────┤
│  │插│在顺序表中进行插入和删除,平均│在链表中的任何位置上进行插入和│
│  │入│要移动表中近一半的结点,尤其是│删除,都只需要修改指针。对于频│
│  │删│当每个结点的信息量较大时,移动│繁进行插入和删除的线性表,宜采│
│  │除│结点的时间开销就相当可观。    │用链表做存储结构。若表的插入和│
│  │操│                                              │删除主要发生在表的首尾两端,则│
│  │作│                                              │采用尾指针表示的单循环链表为宜│
└─┴─┴───────────────┴───────────────┘
    存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构所占的存储量之比,即

    存储密度=(结点数据本身所占的存储量)/(结点结构所占的存储总量)
分享到:
评论

相关推荐

    C语言实现数据结构:单链表,循环链表,双向链表;静态顺序队列

    单链表是一种线性数据结构,每个元素(节点)包含两个部分:数据域和指针域。数据域存储实际的数据,而指针域指向下一个节点的地址。单链表的头节点通常用来初始化链表,其指针域指向第一个元素。插入和删除操作...

    c语言数据结构线性表实验(包括顺序表和链表)

    1. **数据结构基础**:理解线性表的概念,学习顺序表和链表的区别。 2. **C语言编程**:使用指针操作内存,动态内存分配,结构体定义等。 3. **链表操作**:链表的初始化,插入节点,删除节点,查找节点,以及链表的...

    数据结构练习--顺序表和链表

    本话题聚焦于两种基本的数据结构:顺序表和链表,它们是编程中最常用的数据组织方式。 顺序表是一种线性数据结构,其中元素在内存中按顺序存储。这种表的操作通常涉及到数组,因为数组提供了随机访问的能力。在顺序...

    数据结构_顺序表_单链表_循环链表C#

    本专题主要探讨了三种基本数据结构:顺序表、单链表和循环链表,并以学生成绩管理为例,展示了它们在实际问题中的应用。下面将详细阐述这三种数据结构及其在C#语言中的实现。 首先,顺序表是一种线性数据结构,它在...

    数据结构--单链表操作实验报告

    1.从键盘输入顺序任意的5个整数,按有序插入的要求生成第一个有序单链表,将该链表输出显示。 2.再从键盘输入顺序任意的5个整数,按有序插入的要求生成第二个有序单链表,将该链表输出显示。 3.将这两个有序单链表...

    顺序表和链表.pdf

    本文档主要介绍顺序表和链表这两种基本的数据结构。在计算机科学中,数据结构是指在计算机中组织和存储数据的一种特殊方式,它允许高效地访问和修改数据。顺序表和链表作为线性表的两种实现方式,在实际应用中非常...

    数据结构顺序表和4个链表的代码

    顺序表和链表是两种基本的数据结构,它们在程序设计中扮演着重要角色。本篇将深入探讨这两种数据结构及其在C++语言中的实现,通过分析提供的代码文件(dlink.cpp、sqlist.cpp、slink.cpp、cdlink.cpp、cslink.cpp)...

    顺序表和链表

    顺序表和链表是两种基本且常用的数据结构,它们在理解和实现各种算法时起着至关重要的作用。下面将详细介绍这两种数据结构以及在VC++6.0环境下如何进行相关操作。 **顺序表** 是一种线性数据结构,它的元素在内存中...

    数据结构顺序表+单链表+二叉树+图等等各实验总汇.rar

    在这个"数据结构顺序表+单链表+二叉树+图等等各实验总汇.rar"压缩包中,包含了多个关于基础数据结构的实验,对于计算机专业的学生来说,这些都是极其重要的学习资源。 首先,我们来看"顺序表o_o"。顺序表是一种最...

    C语言 顺序链表 单链表 双链表 栈等程序

    总的来说,这个压缩包提供了一个实践C语言数据结构学习的平台,通过编写和运行这些程序,可以加深对顺序链表、单链表、双链表以及栈的理解,提升编程技能。对于初学者来说,这是一个很好的练习机会,对于经验丰富的...

    单链表实验报告

    通过本次实验,不仅加深了对数据结构中链表概念的理解,还熟练掌握了如何使用C语言实现单链表的各种基本操作。特别是在实际编程过程中遇到的问题及其解决方法,如内存分配与释放、链表节点的正确连接等方面,都获得...

    数据结构 用顺序表和链表实现表的连接

    本主题将深入探讨两种常用的数据结构——顺序表和链表,并展示如何使用C语言来实现这两种数据结构来连接表。顺序表和链表各有优缺点,理解和掌握它们对于优化算法和提高程序效率至关重要。 首先,我们来讨论顺序表...

    数据结构(顺序表 顺序链表 链队列)

    顺序链表,也称为单链表,是另一种线性数据结构,但与顺序表不同,它的元素不必须存储在连续的内存位置。每个元素(节点)包含两个部分:数据域,存储实际数据;指针域,存储指向下一个节点的引用。由于不需要保持...

    顺序表,单链表,双向链表

    通过对这些文件的学习和实践,你可以深入理解链表数据结构,提升在实际编程中的数据处理能力。链表是许多高级数据结构(如栈、队列、树等)的基础,熟练掌握链表的操作对提升编程技能至关重要。

    顺序表和单链表筛素数(数据结构)

    本主题聚焦于两种基本数据结构——顺序表和单链表,并探讨如何利用它们来实现筛选素数的功能。 **顺序表**是一种简单且直观的数据结构,它将元素存储在一块连续的内存空间中,可以通过下标直接访问任意位置的元素。...

    数据结构与算法-顺序表(链表篇)

    本主题聚焦于“顺序表”中的“链表”部分,这是一个基础且至关重要的概念,广泛应用于各种软件系统。 链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素称为节点,每个节点包含两个部分:数据域,...

    Python实现单链表、双链表、循环单链表、循环双链表、顺序表相关操作

    在实际应用中,根据需求选择合适的数据结构,如需要频繁插入和删除操作,链表可能优于顺序表;如果主要涉及元素访问,顺序表可能更优。 总的来说,Python提供了丰富的工具来实现和操作链表,理解并熟练掌握这些数据...

    顺序表和链表的基本操作和实际应用

    在实现线性表时,有两种常见的数据结构:顺序表和链表。本文将深入探讨这两种结构的基本操作及其在实际应用中的体现。 顺序表是将数据元素存储在一块连续的内存区域中,其特点是访问速度快,因为可以通过索引直接...

    头歌 顺序表,链表,循环队列的基本操作和应用答案。

    这里我们讨论的是顺序表、链表以及循环队列,这些都是基本的数据结构,广泛应用于算法设计和程序实现中。 顺序表是一种线性数据结构,它在内存中按顺序连续存储元素。它的主要操作包括插入、删除和查找。在顺序表中...

Global site tag (gtag.js) - Google Analytics