链表,栈,队列

原创 2015年07月09日 00:58:05

链表

使用链表时最好使用一个表头,也称为头结点。个人的感受是,使用头节点有一个好处那就是可以方便地修改链表中第一个结点的值。因为对链表中结点的操作通常都是通过调用函数,将指向节点的指针结点作为参数传入来进行更改的。但由于函数是call by value,若使用一个指针直接指向第一个结点, 这个指针指向的结点的值可以改变,但指针本身的值不能改变。例如要在链表的第一个结点前插入一个新的结点,如果指向第一个结点的指针是p,则当p传入函数时,p自身的值无法被改变,也就是说p始终只能指向第一个结点。这时候如果想改变p的值(也就是p中存储的地址),则必须让函数返回一个值赋给p,这样十分繁琐。而有了表头以后并设置一个指针(如L)指向表头,则可以通过L访问整个链表。更重要的是,对第一个结点的访问是通过L指向的表头的next指针进行的,当将L作为参数传入函数时,只有L的值不能改变(L不能指向其他空间),但表头、链表中的第一个结点和其他所有结点都是通过指针去访问的,这样就可以直接在函数中改变链表中所有结点和表头的值,而不必担心call by value带来的影响。当然,L的创建必须要通过函数返回一个值在main()中赋给它来实现,通常增加一个返回值为指向表头的指针的函数即可

另外经过查找后还在网上发现了一些设置表头的优点,转载如下:

(1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些

(2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的


队列

队列是在队尾(rear)插入元素,在队列头部(front)删除元素

队列可以用链表实现也可以用数组实现。如果用数组实现的话,头结点中除了要存储front和rear之外,还要添加一个记录数组长度的变量(total)和记录队列中已有元素个数的变量(current),通过判断current是否小于等于total来判断队列是否已满。初始化时,front应为0,rear应为-1。在更改front和rear的值时记得对数组长度取余

常见的线性列表结构---【数组、链表、栈、队列、堆】

我们在算法设计当中最常见的线性结构列表无非是一下几种:         1.数组:                   数组应该是我最常用的一种。他的存储地址是连续的,就是当我们新开辟一个数组时,...
  • Toplifeww
  • Toplifeww
  • 2015年01月22日 10:44
  • 1170

数据结构(栈,队列,链表,二叉树)

栈栈作为一种数据结构,用途十分广泛。在回调函数等许多场景中都有应用。我们需要了解它的基本用途,那就是先进后出和队列的先进先出正好相反。最近在学习数据结构和算法,于是自己来实现。我特别喜欢C语言的指针,...
  • u013766436
  • u013766436
  • 2016年05月04日 17:03
  • 1921

【数据结构】数组、链表、栈、队列、二叉树

数组 数组存储的数据在地址空间上是连续的。 方便数据的查找,查找数据的时间复杂度为O(1)。...
  • m0_37854317
  • m0_37854317
  • 2017年04月23日 10:50
  • 819

【万字总结】图解堆算法、链表、栈与队列(多图预警)

堆算法什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开...
  • NoMasp
  • NoMasp
  • 2015年12月18日 08:40
  • 18766

java 链表、栈、队列、树的实现

最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查。 一、线性表(链表) 1、节点定义 /**链表节点定义 * @author colonel * */ class...
  • sinat_34322082
  • sinat_34322082
  • 2016年12月16日 15:59
  • 665

c++基本数据结构的类的用法--栈,队列,链表

1.stack类 转自:http://www.169it.com/article/2839007600903800247.html c++ stl栈stack介绍 C++ Stack(堆栈) 是一...
  • xtnc1028
  • xtnc1028
  • 2015年05月28日 16:41
  • 970

链表,队列,堆栈的区别

链表,队列,堆栈的区别 1、栈是个有底的口袋,像袜子。 队列是没底的口袋,像通心粉。 所以:栈的特点是先进后出,队列的特点是先进先出。 2、主要区别是适用的地方不一样,      链表实际上...
  • jixinhuluwa
  • jixinhuluwa
  • 2016年01月06日 17:18
  • 1355

数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树

1\、栈
  • lhkaikai
  • lhkaikai
  • 2014年04月28日 23:10
  • 2104

数组、链表、堆栈、队列和树

数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。听起来是不是很抽象,简单理解:数据结构就是描述对象间逻辑关系的学科。比如:队列就是一种先进先出的逻辑结构,栈是一种先进后出的逻辑结构,家谱...
  • wei78008023
  • wei78008023
  • 2016年02月25日 10:04
  • 2927

数组、链表、堆栈和队列、线性表和顺序表

转自http://blog.csdn.net/amork/article/details/7258216 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。听起来是不是很抽象,简单理解:...
  • qingkongyeyue
  • qingkongyeyue
  • 2016年12月26日 13:51
  • 1048
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表,栈,队列
举报原因:
原因补充:

(最多只允许输入30个字)