
算法与数据结构(C++)
文章平均质量分 68
遨游的laugh哥
CS
展开
-
二叉搜索树BST
二叉搜索树的结构和相关函数功能的实现原创 2022-07-15 22:14:46 · 772 阅读 · 3 评论 -
图的基本操作
有关图的初始化,增删查以及遍历和拓扑排序原创 2022-07-13 21:22:32 · 1235 阅读 · 0 评论 -
并查集----解决等价关系
查的两种基本实现:循环和递归原创 2022-07-11 22:17:35 · 226 阅读 · 0 评论 -
堆排序和优先队列
三种堆排序原创 2022-07-01 20:47:06 · 639 阅读 · 0 评论 -
树结构---二叉树2非递归遍历
目录完整代码(binTree.h)主函数测试 非递归的前中后遍历前序实现:中序 后序 主函数测试 引入栈文件----stack.h前序实现:中序 后序 完整程序原创 2022-06-09 23:03:59 · 366 阅读 · 0 评论 -
树结构---二叉树1
二叉树的相关操作原创 2022-06-06 20:05:00 · 203 阅读 · 0 评论 -
队列的实现和应用
队列概念队列是先进先出的,所以区别于栈都在栈顶进行入栈和出栈,队列是在队头出队,在队尾入队,从而在程序实现上要注意是在队头操作还是队尾操作程序实现基类queuetemplate<class elemType>class queue{public: virtual bool is_empty() const=0; virtual elemType getHead() const=0; virtual elemType getTail() con.原创 2022-05-24 21:36:09 · 457 阅读 · 0 评论 -
栈的两种实现
首先建立栈的基类别----stack.h#ifndef My_stack#define My_stacktemplate<class elemType>class stack{public: virtual bool is_empty() const=0; virtual elemType pop()=0; virtual void push(const elemType& x)=0; virtual elemType top() const=0原创 2022-05-23 19:56:13 · 92 阅读 · 0 评论 -
快速排序---三种
快速排序就是给定一组数,选定一个基准,然后排序结果是:该基准左边元素都比它小,右边元素都比它大。这样对左右两部分还可以继续快速排序,多轮后,就会使得数组有序。下面给出三种快速排序的代码实现方法一:小于或小于等于不断前移思路就是----以左边第一个元素e为基准,如果遇到大于e的元素就右移,如果遇见小于等于e的元素:把当前元素和大于e的最左边元素交换。这样遍历结束,就会使得左部分小于等于e,右部分大于e.最后把元素e和小于等于e部分的最右边交换即可。template<t...原创 2022-05-11 21:32:15 · 673 阅读 · 0 评论 -
c++数据结构---单链表
单链表的概念这里每个节点存储:自己的数据元素和指向其后继结点的指针正是这种设计反映了结点之间的关系这里的头结点的设计只是为了插入和删除操作的方便,比如在第一个元素前插入结点,如果没有头指针,那么从实现来说很困难。而且链表最后一个元素如果没有后继,其后继结点的指针置为空单链表类的设计首先需要一个结点类----里面存储自己的元素数据和后继结点的指针 对于链表类而言----只需存储用于遍历结点的头指针以及为了计算链表长度方便而设计的curLengthprivate: s.原创 2022-05-04 21:41:32 · 1005 阅读 · 0 评论 -
C++数据结构----顺序表
线性表-----处理线性结构的数据结构线性结构:除了外,每个元素都有它的前趋和后继 每个元素,它的前驱是,它的后继是 只有后继,没有前驱;只有前驱,没有后继线性表的基本操作创建一个空的线性表create()----C++中一般用构造函数解决 清除一个线性表clear()----删除线性表的所有数据元素 求线性表的长度Length()----也就是求目前线性表中的元素个数增加insert(i,x)在线性表第i个位置插入元素x----删除remove(i)删除线性表第i个原创 2022-05-04 17:20:03 · 1643 阅读 · 0 评论 -
归并排序---merge sort
归并排序思想首先是自顶向下的思路给出一组数,把数划分为两部分,再把两部分划分四部分,直至每部分只有一个元素剩余然后对底下剩余的两部分排序,使划分的这两部分有序,这样它的上一层就有序了。一直这样做,最后把有序的左半部分和有序的右半部分归并,就可以使得原数组有序也就是分为两个部分-----逐次向下化层,逐次向上归并由于二分化为不同部分,时间复杂度O(logn)然后两个部分进行排序的过是O(n)所以归并排序是O(nlogn)的复杂度代码实现void mergeSort(T a[]原创 2022-04-24 22:02:59 · 291 阅读 · 0 评论 -
递归之“recursion backtracking”
这种递归没有返回值,一般作用是进行决策或者输出可能序列。例子一:给出硬币数量,求输出所有可能结果void coin_sequence(int Length){ coin_sequenceHelper(Length,"");}在具体给出排列结果时,先调用子函数来帮助完成递归过程:coin_sequenceHelper()有两个参数—————leftLength---记录剩余硬币数量,以便结束递归; sofar---递归地记录输出结果,完成程序功能;void coin原创 2022-04-18 22:43:07 · 230 阅读 · 0 评论 -
递归的使用(C++)
递归是一种解决问题的方法(a problem-solving technology): 把大任务通过重复调用其有着同样要求的小任务而得到解决什么是递归?一种迭代或循环的替代品(注意:有的任务只能用递归解决) 使得代码更简洁更美观 经常应用于递归和搜索问题中递归的关键组成base case----也就是问题的最简单形式,经常作为递归结束的出口 recursiom case----也就是迭代形式,可以继续进行递归,使得问题规模进一步简化 递归过程中,每次使用相同的...原创 2022-04-14 21:50:18 · 2251 阅读 · 0 评论 -
插入排序---时间比较
插入排序的思想每次循环使得当前位置的排序是正确的也就是说:插入排序是从后往前进行排序,排序结果就是排序之前的数有序,那么下一次循环把该数放置在正确位置即可,也就是插入在正确位置。//插入排序---交换template<typename T>void InsertionSort_swap(T a[],int n){ for(int i=1;i<n;i++){ //只考虑一个数,第一个位置自然是有序的 int j; for(j=i;j>0原创 2022-04-07 22:03:37 · 421 阅读 · 0 评论 -
数据结构和算法(C++)----简单排序
这里介绍的排序算法复杂性都是:编码容易,是简单排序场景的首选 在一些特殊的情况,简单排序算法效率反而更高 有时可以作为一个复杂算法的子过程一:选择排序(Selection Sort)算法思想在所给的一组数中选出最小值,然后与这组数第一个数的位置互换。接下来从第二个数到最后一个数范围中国,选出最小,与第二个数互换。以此类推,也就是每次选最小然后往前放。代码实现template<typename T>void selection_sort(T a[],int ...原创 2022-04-07 20:34:25 · 203 阅读 · 0 评论