数据结构
Vincent's Blog
A bug machine made in HUST
展开
-
【数据结构】关于二分法
二分法例子:假设有一个容量为n+1开始的数组,从小到大存储了n个数(从下标1开始存储)。给定给定数m,求出数组中值为m的元素的下标,如果未找到则返回0。分析: 以11个数进行分析。首先令左边界为left=1left=1 ,右边界为right=11right=11,mid=(left+right)/2mid=(left+right)/ 2 即为6,判断m跟num[6]的大小。如果num[mid]<原创 2016-03-24 17:27:54 · 1617 阅读 · 0 评论 -
【C】两个有序序列的中位数
程序代码:#include<stdio.h>#define max 100000int main(){ int i=0, n; scanf("%d",&n); int a[max]; int b[max]; for(;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++)原创 2016-07-16 19:12:29 · 856 阅读 · 0 评论 -
【C】最大子列和问题
程序代码:#include<stdio.h>#define MAX 100000long long maxSeq(int num[],long long n){ long long tmp=0,max=0; long long i=0; for(i=0;i<n;i++) { if(tmp < 0) tmp = num[i]原创 2016-07-17 14:32:12 · 409 阅读 · 0 评论 -
【排序】堆排序
程序代码:#include<iostream>#define MAX 1000using namespace std;void Sift(int* r,int size,int i);void swap(int *num,int i,int j);int main(){ int num[MAX]; int n,i; cin>>n; for(i=1;i<=n原创 2016-04-22 17:02:51 · 279 阅读 · 1 评论 -
图的邻接表表示及其BFS遍历
图的邻接表表示及其BFS遍历有下面这张图: 假设该图为有向图,边的指向均为小序号指向大序号。那么对该图的BFS遍历如下(假设从序号0的节点开始遍历): 遍历结果应为:a b f c g i d e hBFS遍历类似于树的层序遍历,需要用到队列。下面是程序代码:1.队列定义和相关操作文件1 queue.h//1.queue.h#ifndef QUEUE_H#define QUEUE原创 2016-08-09 14:11:23 · 1991 阅读 · 0 评论 -
图的邻接表表示及其DFS遍历
图的邻接表表示及其遍历1.图的结构定义#define MAXVEX 100#define true 1typedef char VertexType; //定义图节点值得类型,可随意更换typedef int EdgeType; typedef struct EdgeNode //定义边表节点{ int adjvex;原创 2016-08-08 17:34:37 · 909 阅读 · 0 评论 -
【C】两个有序链表序列的合并
程序代码:#include<stdio.h>#include<stdlib.h>struct ListNode{ int data; struct ListNode* next;};typedef struct ListNode node;int main(){ int i; node l1,l2,l3; l1.next=NULL; l2原创 2016-07-16 20:48:49 · 1186 阅读 · 0 评论 -
【C】树的层序遍历
1.基本思路层序遍历的基本思路就是, 1.根节点入队列。 2.根节点出队,同时将根节点左儿子和右儿子入队 3.结点出队,同时将该节点的左儿子和右儿子入队 4.重复3直到队列为空2.算法实现void layerprint(struct TreeNode* r){ struct queue q1; //创建队列 q1.s=&q1.node[0]; //原创 2016-06-30 10:58:00 · 390 阅读 · 0 评论 -
【C】两个有序链表序列的交集
程序代码:#include<stdio.h>#include<stdlib.h>struct ListNode{ int data; struct ListNode* next;};typedef struct ListNode node;int main(){ int i; node l1,l2,l3; l1.next=NULL; l2原创 2016-07-16 20:13:13 · 8143 阅读 · 1 评论 -
二叉树的前序遍历---非递归实现
二叉树的遍历用递归来实现相当简单,前面已经有文章讨论过,下面来讨论一下二叉树前序遍历的非递归实现。 二叉树的非递归前序遍历主要用栈来实现。根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历,先序遍历具体代码如下:void PrePrint(struct TreeNode *r){ struct stack stack1;原创 2016-06-25 11:11:00 · 590 阅读 · 0 评论 -
【动态规划】凑硬币
算法 推荐阅读:从动态规划新手到专家 上面是在网上看到的一篇好文章,里面有一个凑硬币的问题 如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? (表面上这道题可以用贪心算法,但贪心算法无法保证可以求出解,比如1元换成2元的时候) 首先我们思考一个问题,如何用最少的硬币凑够i元(i<11)?为什么要这么问呢? 两个原因:1.当我们遇到一个大问题时,总是习惯把问题的规模变小原创 2016-04-22 21:05:32 · 4523 阅读 · 3 评论 -
快速排序的实现
输入9个数字,采用快速排序法从小到大排序输出。输入样例:49 38 65 97 76 13 27 49 20输出样例:13 20 27 38 49 49 65 76 97程序代码:#include<iostream>using namespace std;void quicksort(int r[],int start,int end);int main(){ int a[9];原创 2016-04-21 22:33:45 · 241 阅读 · 0 评论 -
【数据结构】二叉树
二叉树总结1. 二叉树的重要性质一个二叉树的第i层最多有2i−12^{i-1}个结点(i>=1)深度为k的二叉树最多有2k−12^k-1个结点(k>=1)对于任何非空二叉树有n0n_0个叶结点,n2n_2个度为2的结点,那么总有关系: n0=n2+1n_0=n_2+12.对二叉树的操作Boolean IsEmpty(BinTree BT);//判断BT是否为空。void Trav原创 2016-03-24 22:28:39 · 311 阅读 · 0 评论 -
【c/c++】字符串相关操作
1.char * gets ( char * str )Reads characters from the standard input (stdin) and stores them as a C string into str until a newline character or the end-of-file is reached.The newline character, if fou原创 2016-03-25 13:49:55 · 405 阅读 · 0 评论 -
【数据结构】【C++】二叉树的建立和先序遍历----(1)
今晚搞清楚了二叉树的建立和先序遍历,不过现在已经是0:32了,该睡觉了,贴上代码,明天补充细节,加油,晚安!==============分割线=====================#include<iostream>#include <malloc.h>#include<stdio.h>using namespace std;struct node{ int data;原创 2016-03-25 00:34:56 · 383 阅读 · 0 评论 -
【数据结构】二叉树结点插入和前序、中序、后序遍历的递归实现
1.二叉树结点定义struct node{ int data; //int可换成其他的数据类型 struct node* left; struct node* right;};每一个二叉树结点都有一个数据域,一个左指针和一个右指针。叶子结点的左指针和右指针均为NULL。2.结点插入操作结点插入可以分为两个操作,一个实现创建新结点,一个实现在合适的位置插入操作。2.1原创 2016-03-25 21:29:28 · 1080 阅读 · 0 评论 -
【数据结构】搜索二叉树的相关操作
1.查找最小元素方法1:Position FindMin(BinTree BST){ if(!BST) return NULL; else if(!BST->left) return BST; else return FindMin(BST->left); }方法2:int minValue(struct node* node){原创 2016-03-28 21:53:53 · 279 阅读 · 0 评论 -
图的邻接矩阵表示法
图的邻接矩阵表示法/* 图的邻接矩阵表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */#define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/typedef int Vertex; /* 用顶点下标表示顶点,为整型 */typedef int WeightType;原创 2016-04-11 10:37:01 · 1283 阅读 · 0 评论 -
【排序】简单选择排序
程序代码://简单选择排序 #include<iostream>using namespace std;void SelectSort(int* r,int n);int main(){ int num[8]; for(int i=0;i<8;i++) cin>>num[i]; SelectSort(num,8); for(int i=0;i<8原创 2016-04-22 15:29:48 · 408 阅读 · 0 评论 -
【排序】希尔排序
程序代码://Shell排序 #include<iostream>using namespace std;void ShellSort(int* r,int n);int main(){ int num[11]; for(int i=1;i<11;i++) cin>>num[i]; ShellSort(num,10); for(int i=1;原创 2016-04-22 14:57:36 · 255 阅读 · 0 评论 -
【排序】直接插入排序
程序代码://直接插入排序#include<iostream>using namespace std;void InsertSort(int* r,int n);int main(){ int num89]; for(int i=0;i<8;i++) cin>>num[i]; InsertSort(num,8); for(int i=0;i<原创 2016-04-22 12:01:34 · 261 阅读 · 0 评论 -
词频分析--字典树的应用
词频分析–字典树的应用字典树又称单词查找树,Trie树,前缀树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。下面我们来用python应用字典树实现词频分析首先我们定义一个节点,节点包括三部分内容,1是字符,2是该字...原创 2018-10-27 00:10:37 · 1013 阅读 · 0 评论