数据结构与算法
文章平均质量分 68
数据结构与算法
深海带鲤鱼
巩固知识
展开
-
35.数据结构-栈的概念与实现(下)
文章目录一.静态栈的缺陷1.1 测试代码二.链式栈的实现2.1 设计要点2.2 入栈2.3 出栈2.4 获取栈顶元素2.5 清空栈2.6 栈成员个数三.完整代码3.1 LinkList.h3.2 Stack.h3.3 linkStack.h3.4 测试程序3.5 结果四:栈实践-符号检测4.1 实现思路4.2 代码实现五.小结一.静态栈的缺陷当存储的元素为类类型的时候,静态栈会的对象在创建的时候会多次调用元素类型的构造函数,影响效率,当使用原生数组作为存储空间,在创建创建栈的时候会调用泛指类型T的构造函原创 2021-11-28 22:37:22 · 296 阅读 · 0 评论 -
34.数据结构-栈的概念与实现(上)
文章目录一.栈的定义与特性1.栈的定义2.栈的特性二.栈的实现2.1 栈的继承2.2 顶层父类栈需要实现的函数2.3 顶层抽象父类的实现三.栈的顺序实现3.1 顺序栈的类定义3.2 栈的初始化一.栈的定义与特性1.栈的定义栈是一种特殊的线性表,只可以在线性表是一端进行操作,其中栈顶(Top)是允许操作的一端,栈底(bottom)是不允许操作的一端2.栈的特性后进先出,(Last In First Out),最后放进去的结点先出来二.栈的实现2.1 栈的继承栈分为顺序栈和链式栈,可以将栈作为原创 2021-11-28 12:54:54 · 256 阅读 · 0 评论 -
33.数据结构-双向循环链表
文章目录一.双向循环链表的结构1.1 双向循环链表的定义1.2 双向循环链表的实现思路1.3 双向循环链表实现要点二.双向循环链表的接口实现2.1 双向循环链表的结构一.双向循环链表的结构1.1 双向循环链表的定义双向循环链表每一个结点有两个指针域,一个指向前驱结点,另一个指向后继结点,并且头结点的前驱指针指向尾结点,尾结点的next指针指向头结点,实际使用时会使用带头双向链表1.2 双向循环链表的实现思路通过模板类定义DualCircleList,并且继承双向链表DualLinkList类在原创 2021-11-27 20:45:23 · 779 阅读 · 0 评论 -
32.数据结构-Linux内核链表刨析
文章目录1.目标1.目标移植Linux内核链表到vs2019原创 2021-11-23 23:00:13 · 400 阅读 · 0 评论 -
30.数据结构-双向链表的实现
单链表的缺陷单链表要想高效的访问链表中的元素,需要从头结点开始,如果需要逆向访问链表中的元素,这时候效率非常低下双向链表在单链表的结点中增加一个指针pre,用于指向当前结点的前驱结点,通过next指针域可以高效访问后继结点,通过pre指针域可以高效访问前驱结点,不管结点处于哪个位置都可以高效的访问前驱和后继结点双向链表的继承层次结构双向链表和单链表在内部实现上完全不同,所以不应该是继承关系,而应该是兄弟关系双向链表的定义在单链表的基础上新增加一个前驱指针域,双向链表的插入操作新结点原创 2021-11-21 19:50:59 · 426 阅读 · 0 评论 -
数据结构笔记23-循环链表
概念循环链表是一种头尾相连的链表,最后一个结点的指针域指向头结点,从而使整个链表形成环从表中的任一个结点出发均可以找到表中其他结点,最后一个链表结点的指针域不为空,指向头结点注意点循环链表中没有NULL指针,所以在遍历的时候,其终止条件不再像非循环链表那样子去判断p或者p->next是否为空,而是判断其是否等于头指针使用尾指针表示单循环链表当使用头指针表示单循环链表时,找到第一个结点的时间复杂度为O(1),找到最后一个结点的时间复杂度为O(n),如果表的操作经常在首尾进行,那么这种方法原创 2021-11-18 22:46:57 · 827 阅读 · 0 评论 -
24.数据结构-单链表的遍历与优化
文章目录1.当前单链表的遍历方法1.当前单链表的遍历方法LinkList<int> l;for(int i = 0;i < 5;i++){ l.insert(0,i);}for(int i = 0;i < l.length();i++){ l.get(i);}在头部插入元素时,时间复杂度是O(n)。 获取元素时,时间复杂度是O(n*n),内层定位位置时有一个O(n)复杂度,那么该怎么优化单链表,使得其在线性的时间内进行遍历操作...原创 2021-11-09 23:07:19 · 942 阅读 · 0 评论 -
23.数据结构-顺序表与单链表对比分析
各操作时间复杂度对比分析从上图可以知道,顺序表的整体时间复杂度要比单链表的时间复杂度低效率的深度分析工程开发中的选择小结原创 2021-11-08 23:16:56 · 152 阅读 · 0 评论 -
22.数据结构-单链表的具体实现
文章目录LinkList.h(未优化)LinkList.cpp(未优化)单链表的优化1.头结点的优化2、目标位置定位的代码优化3.增加查找操作下面实现上一节单链表的插入和删除操作LinkList.h(未优化)#ifndef __LINK_LIST_#define __LINK_LIST_namespace DTlib{ template<class T> class LinkList { protected: struct Node { T valu原创 2021-11-08 22:48:53 · 374 阅读 · 0 评论 -
21.数据结构-线性表的链式存储
1.问题在线性表的顺式存储结构中,插入和删除中间元素需要移动大量的元素,所以需要一种新的数据结构,为线性表的链式存储,即链表2.链式存储的定义每一个链表结点不仅存储本身自带的数据,同时与存储着后继结点的信息,即存储后继结点的地址信息每一个结点都包含指针域和指针域,指针域用来存储后继结点的地址3.链表的分类及概念链表分为单链表,循环链表,双向链表等定义单链表结构体为单链表的内部结构为:其中头结点只是做辅助作用,不存储实际的数据元素4.单链表的插入操作插入图解:如想要在1的位置原创 2021-11-07 19:21:04 · 300 阅读 · 0 评论 -
数据结构-栈
1.栈的定义栈只能从表的一端存取数据,另一端是封闭的,如图所示;在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿下图的栈来说,1是最先进的栈。因此,当需要从栈中取出1 时,根据"先进后出"的原则,需提前将3和2从栈中取出,然后才能成功取出1。栈的头端被称为栈顶;封口端被称为栈底2.栈的类型顺序栈:采用顺序存储结构可以模拟栈存储数据实现栈存储结构,底层为数组链式栈:采用链式存储结构可以模拟栈存储数据实现栈存储结构,底层为链表3.算法在实际应用中,通原创 2020-07-09 20:29:53 · 165 阅读 · 0 评论