数据结构与算法
学习数据结构与算法的记录
GT-一二
学海无涯
展开
-
二分查找(折半查找)简介与代码实现(C++)
二分查找(折半查找)简介与代码实现1.简介2.代码实现(C++)2.1.写法一(target在左闭右闭区间)2.2.写法二(target在左闭右开区间)3.代码检验1.简介二分查找的本质:首先确定待查元素所在的范围,然后逐步缩小范围(区间),直到查找到元素或者查找失败为止。二分查找的前提:数组必须是有序的2.代码实现(C++)2.1.写法一(target在左闭右闭区间)1.因为left与right相等的情况在[left,right]区间有意义,所以在while(left <=原创 2022-04-11 23:32:23 · 2417 阅读 · 0 评论 -
排序算法-插入排序(直接插入排序、Shell排序)
排序算法-插入排序一、直接插入排序二、Shell排序(希尔排序)一、直接插入排序视频讲解基本思想: 将第一个元素看成一个有序子序列,再依次从第二个元素起逐个插入这个有序的子序列中。一般情况下,在第i步上,将elem[i]插入到由elem[0]~elem[i-1]构成的有序子序列中。平均时间复杂度:O(n^2)代码实现(C++):template <class ElemType>void StraightInsertSort(ElemType elem[], int n)//操作原创 2022-03-02 18:26:57 · 510 阅读 · 0 评论 -
二叉树非递归遍历(先序、中序、后序)(C++)
二叉树非递归遍历(先序、中序、后序)(C++)1、先序遍历非递归2、中序遍历非递归2.1、搜索某节点的最左侧节点2.2、中序遍历非递归代码3、后序遍历非递归3.1、修改后的节点结构3.2、搜索某节点的最左侧节点3.3、后序遍历非递归代码1、先序遍历非递归//先序遍历非递归算法template<class ElemType>void NonRecurPreOrder(const BinaryTree<ElemType>& bt, void(*visit)(const E原创 2021-12-13 09:38:43 · 1723 阅读 · 2 评论 -
二叉树实验-(1)实现节点类模板,放在node.h文件中;实现二叉树节点类模板,放在bin_tree_node.h文件中。 (2)实现二叉树关键方法,放在binary_tree.h文件中;
要求:(1)实现节点类模板,放在node.h文件中;实现二叉树节点类模板,放在bin_tree_node.h文件中。(2)实现二叉树关键方法,放在binary_tree.h文件中;main.cpp//主函数:main.cpp#include <iostream> // 编译预处理命令#include <cstdlib> // 含C函数exit()的声明(stdlib.h与cstdlib是C的头文件)using namespace std; /原创 2021-11-15 09:54:00 · 578 阅读 · 0 评论 -
二叉树遍历应用——计算节点个数与树的高度
二叉树的节点个数等于左子树的节点数加上右子树的节点数再加上根节点数1。递归算法:template<class ElemType>int BinaryTree<ElemType>::NodeCountHelp(const BinTreeNode<ElemType>* r)const//操作结果:返回以r为根的二叉树的节点个数{ //空二叉树节点个数为0 if (r == NULL) return 0; //非空二叉树节点个数为左右子树的节点个数加一 el翻译 2021-11-08 15:26:25 · 1226 阅读 · 0 评论 -
把数组中的所有奇数移动到所有偶数之前
**题目:**设计一个将整数数组a[0:n-1]中所有奇数移到所有偶数之前的算法。要求不另外增加存储空间且时间复杂度为O(n)思路:1.创建两个指向数组第一个元素的指针front1,front2。2.用front2使用for循环对数组进行遍历,并判断数组元素的类型(奇数\偶数)3.如果front2所指向的元素为偶数,则对下一个元素进行奇偶性判断。4.如果front2所指向的元素为奇数,则将front2所指向的元素与front1所指向的元素进行调换。5.front2所指向的元素与front1所指原创 2021-10-23 22:42:31 · 2989 阅读 · 0 评论 -
循环队列的基本操作实现(C++)
(1)建立循环队列并实现判空、入队、出队、取队头元素等基本操作;(2)在主函数中测试循环队列的基本操作:要求:1)输入一个序列入队,然后再显示队列的内容;2)显示队头元素;3)出队一个元素后,再显示队列内容。main.cpp#include<iostream>using namespace std;#include"CircQueue.h"template<class ElemType>void Show(const ElemType &e){原创 2021-10-22 18:08:41 · 1863 阅读 · 2 评论 -
使用链栈和链队列的基本操作,判断一个字符串是否为回文(C++)
使用链栈和链队列的基本操作,判断一个字符串是否为回文(1)实现节点类模板,放在node.h文件中;(2)实现链栈类模板,放在lk_stack.h文件中;(3)实现链队列类模板,放在lk_queue.h文件中;(4)实现字符串是否为回文的判断,放在alg.h文件中。node.h#pragma oncetemplate<class ElemType>struct Node{ //数据成员 ElemType data;//数据成分 Node<ElemType>* n原创 2021-10-21 15:01:44 · 1851 阅读 · 2 评论 -
使用链栈和链队列的基本操作将一个队列中的元素倒置(C++)
使用链栈和链队列的基本操作将一个队列中的元素倒置(1)实现节点类模板,放在node.h文件中;(2)实现链栈类模板,放在lk_stack.h文件中;(3)实现链队列类模板,放在lk_queue.h文件中;(4)实现队列元素的倒置,放在alg.h文件中。main.cpp#include <iostream> // 标准流操作using namespace std; // 标准库包含在命名空间std中#include "lk_stack.h" // 链栈#inc原创 2021-10-21 20:33:15 · 2183 阅读 · 1 评论 -
求两个单链表的差集,并以递增形式存储。(C++)
求两个单链表的差集,并以递增形式存储。(1)实现节点类模板,放在node.h文件中;(2)实现线性链表类模板,放在lk_list.h文件中;(3)实现lc返回la与lb表示集合的差集,并使lc中数据元素仍递增有序,放在alg.h文件中。main.cpp#include <iostream> // 标准流操作using namespace std; // 标准库包含在命名空间std中#include "lk_list.h" // 线性链表#include "原创 2021-10-21 19:58:24 · 1930 阅读 · 0 评论 -
数据结构-线性表的顺序存储结构-模板(C++)
数据结构-线性表的顺序存储结构-模板//顺序表类模板template<class ElemType>class SqList{protected: //顺序表实现的数据成员 int count; //元素个数 int maxSize; //顺序表最大元素个数 ElemType *elems; //元素存储空间public: //抽象数据类型方法声明及重载编译系统默认方法声明: SqList(int size = DEFAULT_SI原创 2021-09-26 22:28:00 · 293 阅读 · 0 评论