数据结构与算法
我来试试
这个作者很懒,什么都没留下…
展开
-
100个基础算法题解题思路合集
100个基础算法题解题思路合集1、用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)提示:x&(x-1)解题思路:如果一个数是2的n次方,则化成二进制数首位肯定是1其他位都是0,而 A-1 则首位是0,其余位全是1那么用A&(A-1)结果为0则说明A是2^n2、编程寻找最小k个数解题思路:找出最小或者最大的几个数我使用的是堆排序,效率为0(nlgn)构...原创 2019-11-04 18:56:58 · 774 阅读 · 0 评论 -
二叉树三种遍历代码实现
二叉树三中遍历代码实现实现代码:#include #include typedef struct BiTNode{ int data; BiTNode *lchild,*rchild;}BiTNode,*BiTree;void Insert(BiTNode **tree,int val){ BiTNode *temp=NULL; if(!(*tree)){ temp =原创 2017-11-20 06:55:15 · 6039 阅读 · 4 评论 -
创建二叉排序树,先序遍历,中序遍历,判断是否存在关键点
创建二叉排序树,先序遍历,中序遍历,判断是否存在关键点这是所要创建的二叉排序树,a[10] = {4, 5, 2, 1, 0, 9, 3, 7, 6, 8},请先在草稿纸上画出图形,再看程序代码实现:#include #include typedef struct BTNode{ int key,cout; struct BTNode *lchild; struct BT原创 2017-11-25 23:58:27 · 399 阅读 · 0 评论 -
判断二叉树是否为二叉排序树
判断二叉树是否为二叉排序树输入的原始数组为,a[7]={49,99,65,97,76,13,27},可以先在草稿纸上模拟,再看程序实现代码:#include #include int predit=-1000;//保存当前节点中序前驱值,开始假设为最小值 typedef struct BTNode{ int data; struct BTNode *lchild,*rchil原创 2017-11-26 07:29:04 · 772 阅读 · 0 评论 -
改无序单链表为有序
改无序单链表为有序实现代码:#include #include typedef struct LinkNode{ int data; struct LinkNode *next;} LinkNode;void CreateLinkNode(LinkNode *&L,int a[],int n){ LinkNode *p,*L1; int i; L=(LinkNode*)m原创 2017-12-05 22:36:28 · 2297 阅读 · 1 评论 -
截断一个单链表
截断一个单链表原始单链表L={a1,b2,a2,b2,......an,bn},截成两个分别为L1={a1,a2,a3....an},L2={bn,bn-1,...b1},且L1用L的头结点实现代码:#include #include typedef struct LinkNode{ int data; struct LinkNode *next;} LinkNode;vo原创 2017-12-05 22:40:29 · 727 阅读 · 0 评论 -
判断一个数据序列是否构成一个小根堆
判断一个数据序列是否构成一个小根堆实现代码:#include //判断一个数据序列是否构成一个小根堆 bool IsMinHeap(int A[],int len){//将二叉树结点序列看成一个循序表 int i; if(len%2==0){//结点个数为偶数个时的判断 if(A[len/2]>A[len]) return false; for(i=len/2-1;原创 2017-12-07 22:54:26 · 7184 阅读 · 3 评论 -
求小于一个整数n的所有素数
**主要知识点:一个只能被自己和1整除的正整数就是素数,也叫质数,这里有个规律,就是一个数如果不能被大于2且小于这个整数平方根的数整除,那么这个数就是素数。实现代码:import java.util.ArrayList;/* * 求小于一个自然数n的所有素数 */import java.util.Collections;import java.util.Scanner...原创 2018-07-26 17:30:55 · 3701 阅读 · 0 评论 -
输入两个数,输出其最大公约数和最小公倍数,并输出所有的公约数
输入两个数,求其最大公约数和最小公倍数,并输出所有的公约数以下分别用三种方法求最大公约数,详细代码如下:#include <iostream>using namespace std;//求最大公约数:求差法 void div1(int m,int n){ if ( m > n ) { int temp=n; n=m; ...原创 2018-11-14 12:38:59 · 5050 阅读 · 0 评论 -
创建二叉树并用先序遍历,中序遍历,后序遍历,层次遍历进行遍历
创建二叉树并用先序遍历,中序遍历,后序遍历,层次遍历进行遍历详细代码如下:#include &amp;lt;iostream&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#define maxSize 1000using namespace std;typedef struct BTNode{ int data; struct BTNode *lchild,*rchild;原创 2018-11-14 16:33:08 · 708 阅读 · 0 评论 -
求二叉树的带权路径WPL
求二叉树的带权路径WPL,WPL是二叉树所有叶节点与深度乘积之和代码:#include <iostream>#include <stdlib.h>using namespace std;typedef struct BTNode{ int data; struct BTNode *lchild,*rchild;}BTNode;//二叉树样式 // ...原创 2018-11-14 16:40:27 · 2293 阅读 · 1 评论 -
后序遍历非递归算法的实现
后序遍历非递归算法的实现这个是在前面的基础上,进行后序遍历非递归算法,这个算法是很多求二叉树路径的基础,比如求根结点到某点的路径,或求两个结点最近的公共祖先等。代码:#include <iostream>#include <stdlib.h>#define maxSize 1000 using namespace std;typedef struct BTNo...原创 2018-11-14 20:51:09 · 2133 阅读 · 0 评论 -
反层次遍历,自下而上,从右往左遍历二叉树
实现代码:#include <iostream>#include <stdlib.h>#define maxSize 1000 using namespace std;typedef struct BTNode{ int data,r; struct BTNode *lchild,*rchild;}BTNode;//二叉树样式 // 6// ...原创 2018-11-19 19:47:32 · 1362 阅读 · 0 评论 -
二叉树各种基础算法合集
两种方法创建二叉树,并对其进行遍历和求二叉树的高度代码:#include &amp;lt;iostream&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#define maxSize 1000 using namespace std;typedef struct BTNode{ int data,h; struct BTNode *lchild,*rchild;}BTNod原创 2018-11-19 22:54:14 · 457 阅读 · 0 评论 -
约瑟夫环的实现
约瑟夫环的实现约瑟夫环:n个人围成一个圆,从某一个人开始数数,规定一个条件值x,从1~x轮流报数,数到x的出队,然后从第二个人开始继续轮流报数,直到最终剩下一个人为止,这个人就是最终的胜利者。代码:#include&lt;iostream&gt;using namespace std;int main(){ int n,x,k,j=0; cout&lt;&lt;"输入总数目n:";原创 2018-11-25 10:11:16 · 229 阅读 · 0 评论 -
输入一个字符串,以#结尾,判断字符串中连续数字的长度,并输出这个数字字符串
输入一个字符串,以#结尾,判断字符串中连续数字的长度,并输出这个数字字符串例如:输入:dsfs1213456789fdsf234#输出:101213456789代码:#include <iostream>#define maxSize 1000 using namespace std;int main(){ char ch,b[maxSize]; in...原创 2018-11-25 13:04:37 · 2025 阅读 · 1 评论 -
折半查找算法(开始序列有序)
折半查找算法(开始序列有序)实现代码:#include int Bsearch(int a[],int low,int high,int x){ int mid; while(low<high){ mid=(low+high)/2; if(a[mid]==x) return mid; else if(a[mid]<x) low=mid; else原创 2017-11-25 22:58:56 · 390 阅读 · 0 评论 -
创建单链表,然后进行递增排序
创建单链表,然后进行递增排序实现代码:#include #include typedef struct LNode{ int data; struct LNode *next;}LNode;void CreateLink(LNode *&h,int a[],int n){ int i; LNode *s,*t; h=(LNode *)malloc(sizeof(LNode原创 2017-11-25 22:44:38 · 2444 阅读 · 0 评论 -
顺序表的创建算法
顺序表的创建算法实现代码:#include #include #define MaxSize 50typedef int ElemType;typedef struct SqList{ ElemType data[MaxSize]; int length;}SqList;void Init(SqList *&L){ int i; for(i=0;ilength;++i)原创 2017-12-04 00:06:18 · 1544 阅读 · 0 评论 -
栈的基本操作和应用
栈的基本操作和应用二、栈的链式存储实现代码:#include#include#define maxsize 100using namespace std;typedef struct node{ int data; struct node *next;}lnode ,*linkstack;//初始化栈void init(linkstack *top){ i原创 2017-10-18 08:45:26 · 507 阅读 · 0 评论 -
用栈将十进制数转行成二进制数
用栈将十进制数转行成二进制数用栈实现代码:#includeusing namespace std;#define maxSize 10int baseTrams(int N){ int i,result=0; int stack[maxSize],top=-1; while(N!=0){ i=N%2; N=N/2; stack[++top]=i; } while原创 2017-10-25 07:35:37 · 3335 阅读 · 0 评论 -
严蔚敏《数据结构》代码解析1
一、计算1-1/x+1/x*x…(n表示由n个式子相加)实现代码: #include #include void main() { struct timeb t1,t2; long t; double x,sum=1,sum1; int i,j,n; printf("请输入x n:"); scanf("%lf%d",&x,&n); ftime原创 2017-11-01 23:28:19 · 1215 阅读 · 0 评论 -
对m*n稀疏矩阵建立其三元组
题目:对m*n稀疏矩阵建立其三元组 实现代码://对m*n稀疏矩阵建立其三元组 //输入组合 //1 2 0 1//3 0 2 1//0 1 2 3#includeusing namespace std;#define maxSize 4int creatTrimat(float A[][maxSize],int m,int n,float B[][3]){ int k=原创 2017-10-26 23:00:06 · 796 阅读 · 0 评论 -
顺序表插入数据算法
顺序表插入数据算法实现代码:#include using namespace std;#define maxSize 100typedef struct{ int data[maxSize]; int length;}Sqlist;int insert(Sqlist &L,int p,int e){ int i; if(pL.length+1||L.length==max原创 2017-11-03 23:38:56 · 3539 阅读 · 1 评论 -
顺序表删除数据元素算法
顺序表删除数据元素算法实现代码:#include using namespace std;#define maxSize 100typedef struct{ int data[maxSize]; int length;}Sqlist;int delete1(Sqlist &L,int p,int e){ int i; if(pL.length){ return 0;原创 2017-11-03 23:47:40 · 4529 阅读 · 0 评论 -
创建单链表算法
创建单链表算法实现代码:#include "stdio.h"#include "stdlib.h"typedef int datatype;typedef struct LNode{ datatype data; struct LNode *next;}LNode;int main(){ LNode *head,*p1; int i=1,n; printf("输入所创建原创 2017-11-04 23:27:23 · 328 阅读 · 0 评论 -
头插法建立单链表的算法
头插法建立单链表的算法实现代码:#include #include using namespace std; #define maxSize 100 typedef struct LNode{ int data; struct LNode *next; }LNode; void createListR(LNode *&C,int a[],原创 2017-11-04 23:36:14 · 2162 阅读 · 0 评论 -
尾插法建立单链表的算法
头插法建立单链表的算法实现代码:#include #include using namespace std;#define maxSize 100typedef struct LNode{ int data; struct LNode *next;}LNode;void createListR(LNode *&C,int a[],int n){ LNode *s,*r;原创 2017-11-04 07:18:20 · 2147 阅读 · 0 评论 -
合并两个单链表算法
合并两个单链表算法先创建一个有2个结点单链表,按照递减顺序输入(使用的是头插法,输入序列与输出序列顺序相反 ),然后同样创建一个8个数结点的递减单链表最后输出合并后按非递减顺序的单链表实现代码:#include #include using namespace std; #define maxSize 100 typedef struct LNode{原创 2017-11-05 07:21:42 · 2196 阅读 · 0 评论 -
创建循环双链表,并进行两个链表合并操作
创建循环双链表,并进行两个链表合并操作L1={1,2,3,4,5,6},L2={11,22,33,44,55,66}当i=0时,将L2链接到L1前,i大于0小于6时,插入第i个位置,i大于6是,链接到L1后面实现代码:#include #include typedef struct DNode{ int data; struct DNode *prior; struct DN原创 2017-12-09 23:45:38 · 1694 阅读 · 0 评论 -
头插法,尾插法,创建单链表,然后删除所有结点值为x的结点
头插法,尾插法,创建单链表,然后删除所有结点值为x的结点实现代码:#include #include typedef struct LNode{ int data; struct LNode *next;}LNode;//头插法 void Create1(LNode *&L,int a[],int n){ LNode *p; int i; L=(LNode*)mal原创 2017-12-02 00:03:42 · 903 阅读 · 0 评论 -
快速排序实现
快速排序实现:具体代码:#include void QuickSort(int a[],int I,int J){ int temp; int i=I,j=J; if(i<j){ temp=a[i]; while(i!=j){ while(itemp) --j;//从右开始找比temp小的数(准备放到左边去) if(i<j){ a[i]=a[j];原创 2017-11-23 23:31:54 · 162 阅读 · 0 评论 -
起泡排序(冒泡排序)的实现
起泡排序(冒泡排序)的实现每次交换相邻的两个数,大的放到右边,小的放到左边,总共进行n-1次,就可完成具体代码:#include void BubbleSort(int a[],int n){ int i,j,flag,temp; for(i=n-1;i>0;--i){ flag=0; for(j=0;j<=i;++j) if(a[j+1]<a[j]){ t原创 2017-11-24 06:57:10 · 2072 阅读 · 0 评论 -
直接插入排序算法实现
直接插入排序算法实现每次同一个数左边的数相比较,如果小于左边的数,就与左边的数交换,最后当不满足小于左边的数时,将标记数temp插入到左边的位置,依次做n-1次比较具体实现代码:#include void InsertSort(int a[],int n){ int i,j; int temp; for(i=1;i<n;++i){ temp=a[i]; j=i-1;原创 2017-11-24 07:15:43 · 315 阅读 · 0 评论 -
栈——判断栈的入出栈序列是否合法
栈——判断栈的入出栈序列是否合法I为入栈,O为出栈,如IOIOIO实现代码:#includeusing namespace std;int judge1(char ch[]){ int i=0; int I=0,O=0;; while(ch[i]!='\0'){ if(ch[i]=='I') ++I; if(ch[i]=='O') ++O; i原创 2017-10-24 23:41:08 · 780 阅读 · 0 评论