#include <iostream>
using namespace std;
struct LNode{int data; // 数据域struct LNode *next; // 下一指针域
};void LinkReverse();
void DeleMin(LNode *L);void HeadAdd(LNode *L, int e){// 在头节点后插入eLNode *q, *p = L;// 开辟空间q = (LNode*)malloc(sizeof(LNode));q->data = e;q->next = p->next;p->next = q;
}void TailAdd(LNode *L, int e){// 尾插法LNode *q, *p = L;// 开辟空间q = (LNode *)malloc(sizeof(LNode));while(p->next != NULL){p = p->next;}q->data = e;q->next = p->next;p->next = q;
}bool Look(LNode *L, int e){// 查找单链表中数据域结点值为e的指针LNode *p = L;while(p != NULL){p = p->next;if (p->data == e){return true;}}return false;
}bool DelElem(LNode *L, int e){// 单链表按值删除LNode *q = L, *p = L->next; // q是p的前驱while(p != NULL){if (p->data == e){// 当找到e,此时p指向e, q仍为p的前驱break;}p = p->next;q = q->next;}if(p -> data == e){q->next = p->next;free(p);return true;}else {return false;}return false;
}void print(LNode *p){// 打印单链表cout << "开始打印..." << endl;int i = 0;while(p){cout << i++ << ":" << p->data << endl;p = p->next;}
}int main(){// 头节点LNode *head;head = (LNode *)malloc(sizeof(LNode));head->data = 101;head->next = NULL;cout << "head:" << head->data << endl;cout << "头插法" << endl;// 先插入102,变为 101->102HeadAdd(head, 102);// 再插入103,变为101->103->102HeadAdd(head, 103);print(head);cout << endl;cout << "尾插法" << endl;// 先插入104,变为101->103->102->104TailAdd(head, 104);// 再插入105,变为101->103->102->105TailAdd(head, 105);print(head);// 查找元素if (Look(head, 104)){cout << "104已找到" << endl;}else {cout << "没找到" << endl;}cout << endl;cout << "删除103元素" << endl;if (DelElem(head, 103)){cout << "删除成功" << endl;print(head);}else {cout << "删除失败, 没有103这个元素" << endl;}cout << endl;cout << "下面是练习" << endl;cout << "1.反向输出单链表各个节点的值" << endl;LinkReverse();cout << endl;cout << "2.写一种高效算法来删除单链表中最小值,保证最小值唯一" << endl;cout << "默认链表是L: head->4->6->3->2->5->1->7"<< endl;LNode *L;L = (LNode *)malloc(sizeof(LNode));L->data = 0;L->next = NULL;TailAdd(L, 4);TailAdd(L, 6);TailAdd(L, 3);TailAdd(L, 2);TailAdd(L, 5);TailAdd(L, 1);TailAdd(L, 7);DeleMin(L);return 0;
}// 设L位带头节点的单链表,编写算法实现从尾到头反向输出每个节点的值
void LinkReverse(){LNode *L;LNode *ans;L = (LNode *)malloc(sizeof(LNode));L->data = 0;L->next = NULL;ans = (LNode *)malloc(sizeof(LNode));ans->data = 0;ans->next = NULL;for (int i = 1; i <= 5; i++){TailAdd(L, i);}cout << "初始链表:" << endl;print(L);cout << endl;LNode *p = L->next;while (p != NULL){HeadAdd(ans, p->data);p = p->next;}print(ans);
}void DeleMin(LNode *L){LNode *p = L->next;int min = L->next->data;while(p != NULL){if (p->data < min){min = p->data;}p = p->next;}DelElem(L, min);print(L);
}

输出结果

head:101
头插法
开始打印...
0:101
1:103
2:102尾插法
开始打印...
0:101
1:103
2:102
3:104
4:105
104已找到删除103元素
删除成功
开始打印...
0:101
1:102
2:104
3:105下面是练习
1.反向输出单链表各个节点的值
初始链表:
开始打印...
0:0
1:1
2:2
3:3
4:4
5:5开始打印...
0:0
1:5
2:4
3:3
4:2
5:12.写一种高效算法来删除单链表中最小值,保证最小值唯一
默认链表是L: head->4->6->3->2->5->1->7
开始打印...
0:0
1:4
2:6
3:3
4:2
5:5
6:7
Program ended with exit code: 0

数据结构复习之单链表相关推荐

  1. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  2. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  3. 数据结构之——《单链表》

    数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...

  4. 数据结构精讲——单链表

    新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...

  5. [数据结构与算法] 单链表的简单demo

    Vc6之下编译通过.. 1 /******************************************************* 2 * @: Project: 单链表数据结构演示 3 * ...

  6. 头歌平台数据结构与算法 单链表实验 第1关:倒置链表

    任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...

  7. 【数据结构系列】单链表

    专栏介绍 最近也一直在思考该写点什么文章,想了很久,还是决定重新编写一下数据结构的相关内容,关于数据结构的重要性就不用我多说了,之前的文章中我也写过,但实现语言是Java.其实对于数据结构的学习,最好 ...

  8. 2023王道考研数据结构第二章---单链表

    2.3 单链表 2.3.1 单链表的定义 什么是单链表? typedef关键字:数据类型重命名 typedef <数据类型> <别名> 如: typedef int zheng ...

  9. 【数据结构】Singly-Linked-List 单链表(更新时间:2016-04-07)

    Singly-Linked-List 单链表 趁着状态还不错,而且昨天刚刚发了线性表,现在赶紧来一发简单的单链表 链表从广义上来讲,属于采用指针动态化存储的线性表,在每次添加节点的时候,它向内存申请一 ...

最新文章

  1. python 定时执行 爬虫 模块_【Python】定时执行网站爬虫
  2. python import
  3. 带你一步一步深入Handler源码,醍醐灌顶!
  4. window环境配置虚拟主机
  5. 最新关于高德地图定位失败10:定位服务启动、解决办法
  6. 运放输入偏置电流方向_运算放大器的输入偏置电流
  7. SQL中convert()函数基本使用
  8. 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站「太火」了...
  9. 小米4C官方/第三方ROM下载
  10. html如何实现统计访客功能,JS 实时网站访客(用户)统计
  11. mathematica求定积分和不定积分
  12. 现代企业管理笔记——管理理论新进展
  13. httpd.conf linux,linux上安装apache以及httpd.conf基本配置
  14. linux性价比最高的笔记本,Linux笔记本新品发售 Oryx Pro1599美元起售
  15. frp与nginx结合,实现内网设备的ssh,远程桌面和http访问
  16. WPF加载obj模型-2
  17. 天气预报 接口数据获取
  18. GIF制作器哪个好,如何制作表情包
  19. 艾默生流量计的适用条件
  20. 梅科尔工作室-第一次网页前端培训笔记(HTML常用标签)

热门文章

  1. 關於如何更改戰地2_AIX2 Reality4.5模組人數上限且平衡的方法
  2. 学习地方做一个自己拯救自己心灵的人
  3. 并非少一句话那么简单
  4. 主流CPP开发环境工具(上)-尹成-专题视频课程
  5. 从零开始搭建腾讯云上的SpringBoot容器化应用
  6. 无线协商速率计算原理
  7. eclipse左侧栏目即包资源管理器怎么打开
  8. iis服务器配置微信php,IIS+PHP下微信二次开发JS-SDK签名失败(已解决)
  9. 微信小程序免费SSL证书及SpringBoot服务
  10. 排序算法总结(附动图解释和python实现)