算法
ydsungan
这个作者很懒,什么都没留下…
展开
-
合并俩个有序链表
合并俩个有序链表的俩种算法,一般的合并算法和递归算法,附C++代码实现原创 2023-01-26 11:35:23 · 136 阅读 · 0 评论 -
简单的hash查找
public static void main (String[] args) throws java.lang.Exception { //假设N个数,数的范围在0-99,快速查找某个数k是否在其中 //简单的hash查找 //比如有数23,46,38,2,96,查找7是否在其中 int []a = new int[100]; a[23] = 1; a[46] = 1; a[38] = 1; a[2] = 1; a原创 2021-03-27 10:25:18 · 144 阅读 · 0 评论 -
C使用异或不额外增加空间交换俩个数
#include <iostream>using namespace std;int main(){ int a = 2; //2的二进制是 10 int b = 3; //3的二进制是 11 a = a ^ b; // ^符号表示按位异或,11和10异或得:01,即 a = 01, b = 11 b = a ^ b; //01和11y异或得 10,即 a = 01, b = 10; a = a ^ b; //01和10异或得11,即a = 11, b = 10,原创 2021-03-14 20:38:29 · 83 阅读 · 0 评论 -
待排序列采用带头结点的单链表,请写出在其上进行快速排序的递归算法。
#include <iostream>using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode;/* 带头结点的链表有元素如下 [23, 17, 45, 21, 6, 14, 56, 50] 现在要对链表元素进行快速排序 设原始链表的元素顺序和上述的数组的顺序一致;*/void createList(LNode *p, int *R, int n) //生成单链表{原创 2020-09-06 23:09:05 · 370 阅读 · 0 评论 -
非空二叉排序树上查找元素值为e的结点,若存在返回其指针;若该结点不存在,则插入一个元素值为e的新结点,并返回新结点的指针;
#include <iostream>using namespace std;/* 非空二叉排序树上查找元素值为e的结点,若存在返回其指针;若该结点不存在, 则插入一个元素值为e的新结点,并返回新结点的指针; 欲建树: 7 / \ 5 9*/ typedef struct { int key; char info[10];} elemtype;typedef struct node {原创 2020-09-05 16:20:17 · 373 阅读 · 0 评论 -
给定一棵用二叉链表表示的二叉树,给定其中的结点 x 和 y,编写算法, 显示 x 和 y 结点的所有共祖先结点的值。
基本思路:分别找到结点x的所有祖先结点和y的所有祖先结点,分别存在不同的数组中,最后比较俩个数组,选择相同的输出,就是公共的祖先;#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;/* 目标遍历的原创 2020-09-04 19:32:01 · 930 阅读 · 0 评论 -
编程实现链式存储结构上交换二叉树中所有结点左右子树的算法
编程实现链式存储结构上交换二叉树中所有结点左右子树的算法#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;/* 二叉树的层次遍历 目标遍历的二叉树: 1 / \ 2原创 2020-09-04 16:14:46 · 2664 阅读 · 0 评论 -
二叉排序树的构造、插入结点、查找
#include <iostream>using namespace std;typedef struct BTNode{ int key; struct BTNode *lchild; struct BTNode *rchild;}BTNode;//二叉排序树的关键字查找BTNode* BSTSearch(BTNode* bt, int key){ if (bt == NULL) return NULL; if (bt->key == key) retur原创 2020-08-31 23:01:54 · 274 阅读 · 0 评论 -
查找算法--二叉排序树算法(C++实现完整代码)
如下图所示是某个排序二叉树,什么是排序二叉树?。。。下面的算法实现的是查找某个关键字是否在这棵树上的某个节点中。算法分为俩个部分,第一部分为二叉排序树的创建,第二部分是二叉排序树查找算法;#include <iostream>using namespace std;typedef struct BTNode{ int key; struct BTNode *lchild; struct BTNode *rchild;}BTNode;void createBST(BTNode原创 2020-08-31 21:37:20 · 1438 阅读 · 0 评论 -
查找算法1--折半查找(C++完整代码实现)
折半查找要求线性表有序的下面的这种查找算法采用递归实现,并没有利用折半查找有序的特性,所有下面的这种算法适用于其他特殊线性表;#include <iostream>using namespace std;//递归实现的查找算法int Bsearch(int *R, int low, int high, int key){ if (low > high) return -1; int mid = (low + high) / 2; if (R[mid] == ke.原创 2020-08-31 20:50:06 · 3723 阅读 · 0 评论 -
排序算法7--二路归并排序(C++完整代码实现)
#include <iostream>using namespace std;//归并函数void merge(int *R, int low, int high){ int mid = (low + high) / 2; //需要定义一个额外的数组,临时存放归并的结果 int maxSize = high - low + 1; int temp[maxSize]; int k = 0; int i = low; int j = mid + 1; while (i &l.原创 2020-08-27 09:48:02 · 3314 阅读 · 0 评论 -
排序算法6--选择类排序1--简单选择排序(C++完整代码实现)
#include <iostream>using namespace std;int main(){ //简单选择排序 int R[] = {8, 9, 10, 11, 0}; int n = 5; int temp, pos; for (int i = 0; i < n; ++i) { temp = R[i]; pos = i; for (int j = i + 1; j < n; ++j) { if (R[j] < temp)原创 2020-08-26 18:15:17 · 375 阅读 · 0 评论 -
排序算法5--交换排序2--快速排序(C++完整代码实现)
以上图片来自天勤数据结构,以下代码***非天勤数据结构提供的代码;***#include <iostream>using namespace std;void quickSort(int *R, int low, int high){ if (low >= high) return; //一般以序列中的第一个数字作为枢轴:R[low] int i = low; int j = high; int center = R[low]; int flag = 1;原创 2020-08-26 17:38:17 · 173 阅读 · 0 评论 -
排序算法4--交换排序1--冒泡排序(C++完整代码实现)
冒牌排序每一趟都把未排序数字组合中的最大值移到了组合的最后一位,这个过程就像冒泡,离水面越近气泡体积越大;#include <iostream>using namespace std;int main(){ //冒泡排序 int R[] = {38, 33, 19, 65, 76, 7, 45, 49}; int n = 8; for (int i = 0; i < n - 1; ++i) { for (int j = 0; j < n - i - 1; ++原创 2020-08-26 11:33:24 · 95 阅读 · 0 评论 -
排序算法3--插入排序3--希尔排序(C++完整代码实现)
#include <iostream>using namespace std;int main(){ //希尔排序 int R[] = {38, 23, 19, 65, 76, 7, 45, 49}; int n = 8; int X[] = {5, 2, 1}; for (int i = 0; i < 3; ++i) { int x = X[i]; //取当前增量赋值给x for (int j = 0; j < x; ++j) .原创 2020-08-26 11:04:06 · 178 阅读 · 0 评论 -
排序算法2--插入排序2--折半插入排序(C++完整代码实现)
#include <iostream>using namespace std;int main(){ //折半插入查找 int R[] = {38, 38, 38, 65, 76, 7, 45, 49}; int n = 8; for (int i = 1; i < n; ++i) { int temp = R[i]; int low = 0; int high = i - 1; int pos; while (high >= low) .原创 2020-08-26 10:15:00 · 235 阅读 · 0 评论 -
排序算法1--插入排序1--直接插入排序(C++完整代码实现)
算法思想一些数字,前面一部分已经是有序的了,把待排序数字从有序数字的最后一个往前依次比较找到合适的位置;算法实现#include <iostream>using namespace std;int main(){ int R[] = {34, 23, 36, 59, 15, 27, 23}; int n = 7; for (int i = 0; i < n; ++i) { for (int j = i - 1; j >= 0; --j) {..原创 2020-08-25 11:27:24 · 106 阅读 · 0 评论 -
C++实现图的深度优先遍历算法完整代码
要遍历的图如上图所示采用邻接表实现#include <iostream>using namespace std;#include<stdlib.h># define maxSize 10typedef struct ArcNode{ //边表结点 int adjvex; //是这条边所指向的下一个结点的数组下标 struct ArcNode *nextarc; //int info; //如果有权值就使用}ArcNode;typedef str原创 2020-08-24 16:41:10 · 5676 阅读 · 0 评论 -
C++实现二叉树中序遍历非递归算法
/* 二叉树的中序遍历非递归算法 目标遍历的二叉树: 1 / \ 2 4 / \ 3 5 待输出结果为3,2,5,1,4 1.首先得用上面定义的结构体把这颗树表示出来 2.表示出这颗树后在调用二叉树的中序遍历非递归算法*/#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int原创 2020-08-22 10:09:05 · 2376 阅读 · 1 评论 -
二叉树先序遍历非递归遍历算法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200822091116709.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTQ4MjQyMg==,size_16,color_FFFFFF,t_70#pic_center#include <iostream>using n原创 2020-08-22 09:12:05 · 4688 阅读 · 0 评论 -
二叉树的层次访问(包括建立二叉树的过程)
#include <iostream>using namespace std;# define maxSize 10//树结点的结构体,存储的是int整型的数据typedef struct BTNode{ int data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;/* 二叉树的层次遍历 目标遍历的二叉树: 1 / \ 2 3 / \ 4 5 待输出结果为1,2,3,原创 2020-08-21 11:02:21 · 259 阅读 · 0 评论 -
windows多线程(C++)蒙特卡洛法求π值
#include <windows.h>#include <process.h>#include <iostream>#include <fstream>#include <stdlib.h>#include <time.h> #include<cmath>#include<map>using namespace std;#define n 1000000#define m 5//n是点的个原创 2020-06-12 01:28:06 · 1434 阅读 · 1 评论 -
java实现极简小编译器编译程序1+2+3到栈式计算机
看编译原理的课程的时候,(视频地址:https://www.bilibili.com/video/av32233569?p=3),老师讲到编译实例编译1+2+3到栈式计算机,栈式计算机有俩条指令,push n和add, push n遇到数字把数字推进栈底,add遇到+号把栈顶和此栈顶的数字推出,计算俩者的和,计算后讲和再推进去。于是自己动手实现。经测试可以计算以下这些形式:1+21+2...原创 2020-01-28 14:57:25 · 403 阅读 · 0 评论