一、链表

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里储存下一个节点的指针(Pointer)。一般分为单向链表,双向链表,循环链表等。单向链表:节点中储存数据与指向下一节点的指针;双向链表:节点中储存数据、指向下一节点的指针与指向上一节点的指针;循环链表:将首节点与尾节点通过指针连接在一起。

下图便是一个链表的示意图:

二、节点

节点一般分为两部分:1.此节点所储存的数据2.指向下一节点的指针。

如下例子:

构建一个链表其中每个节点包含学生姓名,学号,性别,年龄信息。

struct Node
{string Name;string Number;string Sex;int age;struct Node *nextptr;
};

可使用typedef改写如下:

(1)使用typedef对结构体指针取别名

typedef struct Node* NodePtr;struct Node
{string Name;string Number;string Sex;int age;NodePtr nextptr;
};

(2)或者使用typdef对结构体取别名

typedef struct Node Node;struct Node
{string Name;string Number;string Sex;int age;Node* nextptr;
};

注:使用这种写法有可能出现下面的问题:第一行代码中nextptr,endptr和headptr都是指针,但第二行中endptr与headptr不是指针,而第三行中endptr不是指针却在两个指针声明中间进行声明,易使人混淆,需要注意!!!

Node *nextptr, *endptr, *headptr;
Node *nextptr, endptr, headptr;
Node *nextptr, endptr, *headptr;

注:c++中可直接使用如下写法,不需要使用typedef取别名。

struct Node
{string Name;string Number;string Sex;int age;Node* nextptr;
};

三、链表的生成

第一步:建立第一个节点,并使用头指针head指向这一节点。并且使用一个current指针指向我们所在的位置。

第二步:使用new申请一定大小的所需空间,并使用上一节点中的指针nextptr指向这片区域。并且为了能够建立后续节点,将current前移,指向新建立的节点。

第三步:如果需要继续建立新的节点,重复第二步,如果不需要就将最后一个节点的nextptr指针设为空指针。

Node *head;
Node *current;//创建头节点
head= new Node ;
head->nextptr = NULL;
current=head;//创建一个新的节点
current->nextptr= new Node;
current =current->nextptr;//将尾节点设为空节点
current->nextptr= NULL;

四、删除节点

1.如果删除的节点位于首位,直接将head指向下一节点,并且释放此节点所占据的内存;

//删除头节点
Node *temp = head;//将首节点的地址储存起来以便之后释放内存!!!
head = head->nextptr;
delete temp;

2.如果删除的节点位于中间,找到需要删除的节点,然后将前一个节点中的指针指向下一个节点,并释放所删除节点的内存;

//删除中间节点
Node *temp;
Node *follow;
temp = head;
while (temp != NULL && xx )//xx为检索条件
{follow = temp;temp = temp->nextptr;
}
if(temp != NULL)
{//将follow指向的结构体中的指针指向需要删除节点的下一个节点follow->nextptr = temp->nextptr;delete temp;//释放需要删除的节点的内存
}

3.如果删除的节点位于结尾,将前一节点中的指针变为空指针,并且释放尾节点的内存。

//删除尾节点
Node *temp;
Node *follow = NULL;
temp = head;
//将指针移到尾节点
while(temp != NULL)
{follow = temp;temp = temp->nextptr;
}
//将前一个指针设为空指针
follow->nextptr = NULL;
delete temp;

链表Linked List相关推荐

  1. C++链表linked list(附完整源码)

    C++链表linked list 链表linked list算法的完整源码(定义,实现,main函数测试) 链表linked list算法的完整源码(定义,实现,main函数测试) #include ...

  2. 链表(Linked List)之单链表

    原文地址:传送门 链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节 ...

  3. 数据结构与算法 —— 链表linked list(01)

    链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...

  4. Java数据结构3_单链表 Linked List

    链表(Linked List)介绍 链表是有序的列表,但是它在内存中的存储如下: 链表是以节点的方式来存储 每个节点包含data域,next域:指向下一个节点 如上图,发现链表的各个节点不一定是连续存 ...

  5. 数据结构:链表(Linked Lists)

    章节主题 链表简介 链表操作 双重链表 变化:尾部参考 变化:循环链接列表 Chapter Topics Introduction to Linked Lists Linked List Operat ...

  6. 三、链表(Linked List)(原理)

    前言 经典的链表应用场景:LRU 缓存淘汰算法 缓存是一种提高数据读取性能的技术,由于缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定. 常见的策 ...

  7. 链表(Linked List)之环形链表

    原文地址:传送门 单向环形链表应用场景 Josephu(约瑟夫.约瑟夫环) 问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始 ...

  8. 链表(Linked List)之双向链表

    双向链表应用实例 使用带head头的双向链表实现 –水浒英雄排行榜 管理单向链表的缺点分析: 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找. 单向链表不能自我删除,需要靠辅助节点 ...

  9. 数据结构与算法 —— 链表linked list(05)

    反转一个单链表. 进阶: 链表可以迭代或递归地反转.你能否两个都实现一遍? 示例 : 给定这个链表:1->2->3->4->5 返回结果: 5->4->3-> ...

  10. java数据链表 有什么用_链表(linked list)这一数据结构具体有哪些实际应用?

    最显著的应用就是文件系统. 你格式化硬盘时会让你选择fat32.ntfs格式,其实就是让你选择存储链表空间规模及格式.为提高系统效率,你有时需要做文件碎片整理,这说明一个文件的数据不一定是连续存放的, ...

最新文章

  1. C#截取屏幕保存图片
  2. 苹果运行内存比较_决定手机流畅度到底是看CPU还是运行内存,你知道么?
  3. 在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
  4. 可能没有很好的重工业转型的case
  5. 通过加载 QSS 文件的方式美化 QT 界面
  6. Centos7下安装netstat
  7. 算法运行时间中的对数
  8. Requests库实战(三)---爬取豆瓣电影详细信息
  9. Window服务的创建与删除
  10. 【LeetCode笔记】剑指 Offer 10-I. 斐波那契数列 (Java、递归、动态规划)
  11. c语言条件运算符的作用,条件运算符的用法_C运算符的结合方向
  12. 2017.9.9 传送带 失败总结
  13. UAC1.0和UAC2.0区别(八)
  14. _IO, _IOR, _IOW, _IOWR 宏的用法与解析
  15. 奇异值分解(Singular Value Decomposition, SVD)——快速教程
  16. MATLAB人脸识别系统[GUI界面,完美运行,详细解析]
  17. c语言for循环延时函数作用,C语言循环语句实现单片机延时函数.pdf
  18. flex C#在线拍照
  19. 上班族时间自由,做什么副业合适?最好是在手机或电脑上的副业?
  20. VMWare安装报错:此安装程序要求您重新启动系统以完成 Microsoft VC Redistributable安装,然后重新运行该安装程序。

热门文章

  1. swustoj 143 汉诺塔
  2. Ubuntu 16.04下使用Wine安装Windows版的微信(不太完美)
  3. 用手机打开word图表位置很乱_9个工作中经常用到的Word技巧,能大大提升你的工作效率...
  4. 【RDMA】qp数量和RDMA性能(节选)|连接数
  5. 【词法分析和语法分析】编译原理实验一(hit)2022-lab1
  6. matlab中如何定义局部变量,matlab局部变量定义 persistent
  7. SCL语言(入门初级笔记)
  8. 开源驱动全球经济发展
  9. spring-rabbitmq Direct reply-to 模式
  10. 记录下一个带内购的iOS app的上架App Store历程