数据结构与算法
贤小哥
我要好好学习,天天向上
展开
-
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2011-12-07 20:15:20 · 256 阅读 · 0 评论 -
一个整数阶乘N!末尾有多少个0
#include #include int Count0(int N){ int ret = 0, i, j; for(i = 1; i { j = i; while(j % 5 == 0) { ret++; j /= 5;原创 2012-02-19 08:24:06 · 470 阅读 · 0 评论 -
寻找发帖水王
#include #include int Find(int *ID, int N){ int candidate = 0; int nTimes, i; for(i = nTimes = 0; i { if(nTimes == 0) { int tt = ID[i];原创 2012-02-19 09:32:34 · 6009 阅读 · 0 评论 -
字符串移位包含问题
#include #include int main(){ int flag; char src[] = "AABBCD"; char dec[] = "CDAA"; int len = strlen(src); int i, j; for(i = 0; i { char原创 2012-02-17 11:14:03 · 239 阅读 · 0 评论 -
求二进制数中1的个数
#include #include int Count(int v){ int num = 0; while(v) { if(v % 2 == 1) { num++; } v = v / 2; } return num;原创 2012-02-19 01:23:32 · 267 阅读 · 0 评论 -
从无头单链表中删除节点
#include #include struct Node{ int nValue; struct Node* next;};void DeleteRandomNode(struct Node* pCurrent){ if(pCurrent == NULL) { exit(0); } struct原创 2012-02-18 12:19:20 · 465 阅读 · 0 评论 -
重建二叉树
#include #include #define TREELEN 6struct Node{ struct Node * pLeft; struct Node * pRight; char chValue;};void ReBuildTree(char * pPreOrder, char * pInOrder, int nTreeLen, s原创 2012-02-18 12:23:20 · 223 阅读 · 0 评论 -
树中两个节点的最低公共祖先
哈哈原创 2012-02-18 22:37:23 · 603 阅读 · 1 评论 -
翻转字符串
#include #include void revese(char *str){ char *begin = str, *end = str, *ptr = str; while(*ptr++ != '\0'); end = ptr - 2; while(begin { char temp;原创 2012-02-19 14:50:25 · 351 阅读 · 0 评论 -
求数组的子数组之和的最大值
#include #include int MaxSum(int *A, int n){ int maximum = -32566; int sum, i, j, k; for(i = 0; i { for(j = i; j { for(k = i; k原创 2012-02-19 16:03:25 · 401 阅读 · 0 评论 -
求数组中最长递增子序列
#include #include #define MAXLENGTH 10int LIS(int array[], int line[], int len){ int i, j, k; int LIS[MAXLENGTH]; int path[MAXLENGTH]; //1, -1, 2, -3, 4, -5, 6, -7原创 2012-02-19 16:53:23 · 383 阅读 · 0 评论 -
最长公共子序列(LCS)问题(连续子序列)的三种解法
最长公共子序列(LCS)问题有两种方式定义子序列,一种是子序列不要求不连续,一种是子序列必须连续。上一章介绍了用两种算法解决子序列不要求连续的最终公共子序列问题,本章将介绍要求子序列必须是连续的情况下如何用算法解决最长公共子序列问题。 仍以上一章的两个字符串 “abcdea”和“aebcda”为例,如果子序列不要求连续,其最长公共子序列为“abcda”,如果子序列要求是连续,则其转载 2012-03-21 00:46:57 · 7803 阅读 · 1 评论 -
最长公共子序列(LCS)问题(非连续子序列)的两种解法
最长公共子序列也称作最长公共子串,英文缩写是LCS(Longest Common Subsequence)。其定义是:一个序列S,如果分别是两个或多个已知序列的子序列,且是符合此条件的子序列中最长的,则称S为已知序列的最长公共子序列。 关于子序列的定义通常有两种方式,一种是对子序列没有连续的要求,其子序列的定义就是原序列中删除若干元素后得到的序列。另一种是对子序列有连续的要求,其转载 2012-03-21 00:48:23 · 1748 阅读 · 1 评论 -
把字符串转换为整数atoi
#include #include enum Status{kValid = 0, kInvalid};int g_nStatus = kValid;long long StrToIntCore(const char* digit, int flag){ long long num = 0; while(*digit != '\0')原创 2012-02-18 22:22:43 · 358 阅读 · 0 评论 -
计算字符串的相似度
#include #include int minValue(int a, int b, int c){ int min = ((a return min;}int CalculateStringDistance(char* strA, int pABegin, int pAEnd, char* strB, int pBBegin, int pBEnd)原创 2012-02-18 12:21:13 · 376 阅读 · 0 评论 -
队列中取最大值操作问题
#includeusing namespace std;#include#includeclass stack{private: int stackItem[1000]; int stackTop; int link2NextMaxItem[1000]; int maxStackItemIndex;public:原创 2012-02-17 09:21:31 · 373 阅读 · 0 评论 -
寻找第K大的数的方法总结
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值。 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家。 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。 解法1: 我们转载 2011-12-08 00:13:27 · 441 阅读 · 0 评论 -
时间复杂度的计算方法
求解算法的时间复杂度的具体步骤是: ⑴ 找出算法中的基本语句; 算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。 ⑵ 计算基本语句的执行次数的数量级; 只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。转载 2011-12-10 12:40:13 · 1337 阅读 · 0 评论 -
用"%20" 替换字符串中的空格
#include #include void ReplaceBlank(char string[]);int main(){ char string[] = "you are very happy"; printf("source string is: %s\n", string); ReplaceBlank(string); printf原创 2012-01-12 21:23:19 · 563 阅读 · 0 评论 -
二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、6、5,没有原创 2012-01-15 23:52:48 · 370 阅读 · 0 评论 -
RLE压缩和解压算法以及链表翻转
#include #include struct RleNode{ int count; char ch; struct RleNode * next;};//压缩字符串struct RleNode* encode(char *str){ char *ptr = str; int num = 1; int i原创 2012-01-14 21:11:20 · 600 阅读 · 0 评论 -
与树有关的一些名词
原创 2012-01-14 18:21:22 · 453 阅读 · 0 评论 -
二元树中和为某一值的所有路径
package com.xiaoge;import java.util.*;class BinaryTree { private BinaryTreeNode root; // 根 public BinaryTreeNode getRoot() { return root; }原创 2012-01-15 18:38:19 · 304 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
package com.xiaoge;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Ser原创 2012-01-15 19:01:08 · 330 阅读 · 0 评论 -
创建链表和显示链表
#include #include struct Stud{ int no; int score; struct Stud *next;};//创建链表struct Stud *create(){ struct Stud *head, *p, *q; int n, s; head = (struct Stud原创 2012-01-14 21:09:52 · 830 阅读 · 0 评论 -
求二叉树中节点的最大距离
1、C语言版#include #include struct Node{ struct Node * pLeft; struct Node * pRight; int nMaxLeft; int nMaxRight; char nValue;};int nMaxLen = 0;////初始化树原创 2012-02-13 01:20:56 · 295 阅读 · 0 评论 -
分层遍历二叉树
#include #include struct Node{ int data; struct Node* lChild; struct Node* rChild;};struct Node* initTree(){ struct Node* tree[10]; int i; for(i=0原创 2012-02-15 01:01:50 · 319 阅读 · 0 评论 -
排序算法
一、插入排序#include #include void insertsort(int *array, int len){ int i, j, temp; for(i = 1; i { temp = array[i]; j = i; while(temp {原创 2012-02-18 20:02:26 · 293 阅读 · 0 评论 -
RLE行程长度压缩算法
RLE(Run Length Encoding)行程长度压缩算法(也称游程长度压缩算法),是最早出现、也是最简单的无损数据压缩算法。RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于第一种情况,对连续的重复数据块进行压缩,压缩方法就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据。对于第二种情况,RLE算法有两种处理方法,一种转载 2012-03-21 00:45:24 · 696 阅读 · 0 评论