这篇博客,仅供搞笑,并无任何不尊敬作者的意思,原书作者在学习上给了我很大帮助!

前言:我学习到链式存储结构,书中p37页,合并两个链表这一章节,它给了一段不超过15行的抽象代码~(微笑)

书图:

然后我们看看万恶之源:

对,就是这个,时间复杂度跟表长有关,等于O(La+Lb)

然后...给大家看看主函数:

int main()
{if (!InitList(&La)){return ERROR;}if (!InitList(&Lb)){return ERROR;}int i, j;printf("请输入La中的元素个数:");scanf_s("%d", &i);while (i){InfoElem(La);i--;}ListTraverse(La, PRINTF);printf("\n请输入Lb中的元素个数:");scanf_s("%d", &j);while (j){InfoElem(Lb);j--;}ListTraverse(Lb, PRINTF);MergeList_L(La, Lb, Lc,Maxcompare);//ListTraverse(Lc, PRINTF);system("pause");return 0;}

就那么点!!!不多吧???

但他妈的这自定义函数多啊,卧槽

各位大哥看图,看图就知道了,卧槽,我花了整整六个小时,才把完整算法完善好

但...有一说一,代码还是蛮整洁的....逻辑也清晰,但是这他妈的只是合并一个链表...我整整...写了300多行

卧槽,这书能把人逼疯......

最后附上完整的测试代码!!!期待大佬指出不足!!!:

#define OK 1
#define ERROR 0#include<stdio.h>
#include<stdlib.h>typedef int Status;typedef struct LNode
{int data;struct LNode* next;
}*Link,*Position;typedef struct
{Link head, tail;int len;
}LinkList;
LinkList La, Lb, Lc;
Status InitList(LinkList*);
Status MergeList_L(LinkList, LinkList, LinkList, int(*compare)(int, int));
Status InfoElem(LinkList);
Position GetLast(LinkList);
Position GetHead(LinkList);
Position NextPos(LinkList, Link);
int GetCurElem(Link);
int Maxcompare(int, int);
Status DelFirst(Link, Link*);
Status Append(LinkList, Link);
void FreeNode(Link);
Status ListTraverse(LinkList, Status(*visist)(Link));
Status PRINTF(Link);int main()
{if (!InitList(&La)){return ERROR;}if (!InitList(&Lb)){return ERROR;}int i, j;printf("请输入La中的元素个数:");scanf_s("%d", &i);while (i){InfoElem(La);i--;}ListTraverse(La, PRINTF);printf("\n请输入Lb中的元素个数:");scanf_s("%d", &j);while (j){InfoElem(Lb);j--;}ListTraverse(Lb, PRINTF);MergeList_L(La, Lb, Lc,Maxcompare);//ListTraverse(Lc, PRINTF);system("pause");return 0;}
Status InitList(LinkList *L)
{L->head = (Link)malloc(sizeof(struct LNode));if (L->head == NULL){return ERROR;}L->head->next = NULL;L->len = 0;return OK;
}Status InfoElem(LinkList L)
{Link node;node = (Link)malloc(sizeof(struct LNode));printf("请输入元素:");scanf_s("%d", &node->data);L.tail = GetLast(L);node->next = L.tail->next;L.tail->next = node;L.tail = node;L.len++;return OK;
}Position GetLast(LinkList L)
{Link last;last = L.head;while (last->next != NULL){last = last->next;}return last;
}
Position GetHead(LinkList L)
{return L.head;
}
Position NextPos(LinkList L, Link p)
{if (p->next == NULL){return 0;}return p->next;
}
int GetCurElem(Link p)
{return p->data;
}
int Maxcompare(int a, int b)
{if (a <= b){return 0;}return 1;
}
Status DelFirst(Link h, Link* s)
{Link q;q = h->next;h->next = q->next;q->next = NULL;*s = q;return OK;
}
Status Append(LinkList L, Link s)
{Link q;q = L.head;while (q->next != NULL){q = q->next;}q->next = s;L.tail = s;
}void FreeNode(Link q)
{free(q);q = NULL;
}
Status ListTraverse(LinkList L, Status(*visist)(Link))
{printf("开始观察:");Link q = L.head->next;while (q != NULL){if (!(visist(q))){return ERROR;}else{q = q->next;}}
}
Status PRINTF(Link q)
{printf("%d ", q->data);return OK;
}Status MergeList_L(LinkList La, LinkList Lb, LinkList Lc, int(*compare)(int, int))
{Link ha, hb, pa, pb, q, pc;int a, b;if (!InitList(&Lc)){return ERROR;}ha = GetHead(La);hb = GetHead(Lb);pa = NextPos(La, ha);pb = NextPos(Lb, hb);int i = 0;while (pa && pb){i++;a = GetCurElem(pa);b = GetCurElem(pb);if (((*compare)(a, b) <= 0)){printf("pa:第%d次:%d\n", i, pa->data);DelFirst(ha, &q);Append(Lc, q);pa = NextPos(La, ha);}else{printf("\n");printf("pb第%d次:%d\n", i, pb->data);DelFirst(hb, &q);Append(Lc, q);pb = NextPos(Lb, hb);}}if (pa){Append(Lc, pa);printf("pb第%d次:%d\n", i+1, pa->data);}else{Append(Lc, pb);printf("pb第%d次:%d\n", i+1, pb->data);}pc = Lc.head->next;printf("\n\nLc:");ListTraverse(Lc, PRINTF);FreeNode(ha);FreeNode(hb);return OK;
}

不过,可能是我屏幕小吧

咋一看也没多少....

哈哈哈哈哈哈

就是完善完后挺开心的真的,对于线性表:顺序表,动态顺序表,静态链式表,动态单链,动态双链,循环链表

都有很大的提升~

但是!!!!!!

上边的所有操作都是基于单链上完成的...

疑惑:我有必要再写个双循环链嘛....感觉挺麻烦,不知道有没有必要....期待大佬回答!!!

(滑稽保命)对于《数据结构》严蔚敏教程的吐槽,附:详细代码相关推荐

  1. 线性表的顺序表示和实现 (创建,插入,删除,查找)数据结构 严蔚敏(C语言版)代码实现

    实现工具:dev 顺序表功能: 创建一个空的线性表: 在线性表中插入元素: 在线性表中删除元素: 在线性表中查找元素: 代码:(详解请看注释) #include<stdio.h> #inc ...

  2. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

  3. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  4. 【计算机】数据结构-严蔚敏/清华大学P3

    [计算机]数据结构-严蔚敏/清华大学P1 第二章    线  性表 线性结构 是 一个数据元素的有序(次序)集 线性结构的基本特征: 1.  集合中必存在唯一的一个"第一元素": ...

  5. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  6. 数据结构严蔚敏清华大学pdf_2019年清华大学自动化系控制工程专业大数据方向考研经验分享...

    基本情况(以下内容仅代表个人观点) 我目前就读于西南某双非石油工程专业,2019考研报考清华大学自动化系大数据工程专业,一志愿复试被刷,侥幸调剂录取至微电子系.初试总分346分(政治-63 + 英语一 ...

  7. 数据结构----严蔚敏

    最近一直想找一本纯数据结构的书来学习,找来找去都没有找到一本合适的书籍,相比之下国内的书籍之中,严蔚敏和吴伟民的还算是经典版了,很多国内其他数据结构教材都参考这本书的.但缺点是很多都是伪代码,对编程初 ...

  8. 数据结构(C语言版)严蔚敏---图的操作的相关代码

    1. 将邻接表转换成邻接矩阵 main.cpp void Convert(ALGraph G,MGraph &M){M.vexnum = G.vexnum;M.arcnum = G.arcnu ...

  9. 有关数据结构基础知识(数据结构 严蔚敏版)

    1. 数据结构是一门研究非数值计算程序设计中的操作对象 以及这些对象之间的关系和操作的学科 2. 研究包括逻辑结构和存储结构 1) 逻辑结构(从具体问题抽象出来的数学模型)分为 集合结构 线性结构 树 ...

  10. 数据结构----严蔚敏 (链表)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.链表是什么? 二.使用步骤 总结 前言 数据结构是软件技术.网络技术等计算机类专业的一门重要的专业基础课程,其理论 ...

最新文章

  1. Linux怎么让文件按大小排序,linuxsortlinux系统下,按文件的大小进行排序的命令...
  2. 关于共用体所占的内存空间的问题
  3. python有哪些常见的开发环境_Python集成开发环境有哪些
  4. matlab 比例谐振控制器,比例谐振控制的一种实现(含代码)
  5. ZOJ 2849 Attack of Panda Virus (优先队列 priority_queue)
  6. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
  7. Hive体系结构(二)Hive的执行原理、与关系型数据库的比较
  8. WordPress的Content-Length header already present错误
  9. 机器学习笔试面试超详细总结(四)
  10. js实现椭圆轨迹_华为开发者大会2020隆重召开,亿健T10椭圆机荣耀参展
  11. 受iPhone 12销量变化影响 Q2柔性OLED面板出货量预计环比下滑35%
  12. NFC的实用性有多高,真的是刚需吗?
  13. iOS的四种持久化存储
  14. Windows 365 以明文形式暴露微软 Azure 凭据
  15. Lesson3.2 variables
  16. javaWeb企业分布式、互联网、云开发平台-Jeesz
  17. 产品经理,没有那么牛逼
  18. 解析java数值类型数据混合运算
  19. [转帖]CAPCOM的详细历史
  20. 计算机专业的优秀学长寄语大一新生,学长对大一新生的寄语

热门文章

  1. java多线程问题(代码示例)
  2. MySQL之按日期查询表数据
  3. 2.4.4 Profile基本参数
  4. Java基础入门及安装准备
  5. INDEX函数,隔行提取数据
  6. 2022年机器视觉综述论文
  7. 【最佳实践】瀚高数据库 Windows企业版v6.0.4 的安装
  8. charles限制网速
  9. SQL Server 2000~2017补丁包
  10. INT_MAX和INT_MIN的含义和用法