单链表

1、链接存储方法

 链接方式存储的线性表简称为链表(Linked List)。

 链表的详细存储表示为:

  ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的。也能够是不连续的)

  ② 链表中结点的逻辑次序和物理次序不一定同样。为了能正确表示结点间的逻辑关系,在存储每一个结点值的同一时候,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

注意:

  链式存储是最经常使用的存储方式之中的一个。它不仅可用来表示线性表。并且可用来表示各种非线性的数据结构。



2、链表的结点结构

  ┌──┬──┐

  │data│next│

  └──┴──┘ 

       data域--存放结点值的数据域

       next域--存放结点的直接后继的地址(位置)的指针域(链域)

注意:

     ①链表通过每一个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。

     ②每一个结点仅仅有一个链域的链表称为单链表(Single Linked List)。

3、头指针head和终端结点指针域的表示

     单链表中每一个结点的存储地址是存放在其前趋结点next域中,而開始结点无前趋,故应设头指针head指向開始结点。

注意:

     链表由头指针唯一确定,单链表能够用头指针的名字来命名。

【例】头指针名是head的链表可称为表head。

  终端结点无后继,故终端结点的指针域为空,即NULL。

4、单链表的一般图示法

     因为我们经常仅仅注重结点间的逻辑顺序,不关心每一个结点的实际位置,能够用箭头来表示链域中的指针,线性表(bat。cat,fat,hat。jat。lat。mat)的单链表就能够表示为下图形式。



       

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来訪问结点就意味着訪问一个不存在的变量,从而引起程序的错误。

     ② 有关指针类型的意义和说明方式的详解,【參考C语言的有关资料】。

数据结构—单链表(类C语言描写叙述)的更多相关文章

  1. 数据结构-二叉树的遍历(类C语言描写叙述)

    遍历概念     所谓遍历(Traversal)是指沿着某条搜索路线.依次对树中每一个结点均做一次且仅做一次訪问.訪问结点所做的操作依赖于详细的应用问题. 遍历是二叉树上最重要的运算之中的一个,是二叉 ...

  2. 数据结构-单链表-类定义2-C++

    上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...

  3. 数据结构-单链表-类定义C++

    原理可访问https://www.cnblogs.com/yang901112/p/11674333.html 头文件 #ifndef RLIST_H #define RLIST_H #include ...

  4. C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...

  5. python算法与数据结构-单链表(38)

    一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  6. C# 数据结构--单链表

    什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...

  7. 设计模式-适配器模式(Go语言描写叙述)

    在上一篇博客设计模式-策略模式(Go语言描写叙述)中我们用最简单的代码用go语言描写叙述了设计模式中的策略模式,用最简单的实例来描写叙述相信能够让刚開始学习的人能够非常轻松的掌握各种设计模式.继上篇博 ...

  8. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  9. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

随机推荐

  1. oracle经常使用函数(2)

    1.TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character} FROM ]trim_source) 函数 參数 ...

  2. Noip蒟蒻专用模板

    目录 模板 数论 线性筛素数 线性筛欧拉 裴蜀定理 卢卡斯定理 矩阵快速幂 逆元 高斯消元 图论 割点 最小生成树 倍增 SPFA 负环 堆优化迪杰斯特拉 匈牙利 数据结构 树状数组 ST表 线段树 ...

  3. String or binary data would be truncated 异常解决办法 .

    原因:一般出现这个问题是因为数据库中的某个字段的长度小,而插入数据大解决:修改表结构,使表字段大小相同或大于要插入的数据

  4. Ubuntu14.04下初步使用MongoDB

    不多说,直接上干货! Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐) shell命令模式 输入mongo进入shell命令模式,默认连接的数 ...

  5. asp.net 后台给前台控件添加及设置属性

    txtTopImgBox.Attributes.Add("title", "12312121"); Text1.Style["background-c ...

  6. form&input

    <form action="http://www.baidu.com" method="post" autocomplete="on" ...

  7. vue 父子组件通信props/emit

    props 1.父组件传递数据给子组件 父组件: <parent> <child :childMsg="msg"></child>//这里必须要 ...

  8. canvas绘制饼型图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. (转载) listview实现微信朋友圈嵌套

    listview实现微信朋友圈嵌套 标签: androidlistview 2016-01-06 00:05 572人阅读 评论(0) 收藏 举报  分类: android(8)  版权声明:本文为博 ...

  10. Block formatting context & Inline formatting context(BFC&IFC)的区别(转载)

    何为BFC与IFC bfc与ifc是针对页面正常流的两种环境,块级元素处于bfc环境中,行内元素处于ifc环境中. 元素是块级元素or行内元素由其display属性决定: block, table, ...