
数据结构/算法
JW2020
学生,就读于中国大陆UESTC,哈哈.....编程业余爱好者!
展开
-
UTHash demo
uthash使用demo转载 2022-06-12 22:20:35 · 154 阅读 · 1 评论 -
使用qsort函数对二维数组排序
qsort使用原创 2022-06-05 18:42:31 · 1372 阅读 · 2 评论 -
模拟C函数库strstr()函数
函数返回一个指针,它指向字符串strCharSet首次出现于字符串string中的位置,如果没有找到,返回NULL。const char * MyStrStr(const char * string, const char * strCharSet){ char * p1 = const_cast (string); //去常量性 char * p2 = const_cast (str原创 2012-08-02 09:30:22 · 1032 阅读 · 0 评论 -
求一个字符串中出现的相同且长度最长的字符串,及其首字符的位置
思路:对源字符串所有后缀的所有子串,从每一个后缀的最长子串开始,分别从前向和后向开始在源字符串中查找匹配的子串,若两次查找位置不一致则说明存在重复的长度最长的字串,并返回前向查找时的位置。e.g. string = “abcedfghiabckl‘,当使用子串”abc“在源字符串中分别前向和后向匹配时,找到的位置分别为pos1=0, pos2 = 9.//求一个字符串中出现的相同且长度原创 2012-07-30 21:11:06 · 3970 阅读 · 1 评论 -
求一个字符串中连续出现次数最多的字串
思想:以字符串“abcbcbcabc”为例step 1. 穷举出源字符串的所有后缀:substr[0] =abcbcbcabcsubstr[1] =bcbcbcabcsubstr[2] =cbcbcabcsubstr[3] =bcbcabcsubstr[4] =cbcabcsubstr[5] =bcabcsubstr[6] =cabcsubstr[7] =abc转载 2012-07-29 21:52:03 · 1279 阅读 · 0 评论 -
转换字符串格式为:源字符串里的字符+该字符连续出现的个数
e.g. 123342222,转换为1121324124利用sprintf()函数,将任意整数打印到字符串中void ConvertStr(char * pStr, char * pOutput){ char * pCurrent =pStr; char * pNext; int nCount = 1; int i = 0; while (*pCurrent != '\0'原创 2012-08-05 21:05:34 · 2068 阅读 · 0 评论 -
快速排序
1. 冒泡排序(稳定的) 首先将第一个记录的关键字与第二个记录的关键字比较,按照升序或者降序,将两个记录交换。然后比较第二个记录和第三个记录的关键字。依次类推,直到第n-1个记录和第n个记录的关键字进行比较。上述过程即称为一趟排序,第一趟排序完后,某个记录的关键字最小或者最大的排列到整个序列的前面后者后面。然后以此类推,对n-1个元素组成的序列进行同样的排序操作..........经过原创 2012-01-09 20:59:05 · 813 阅读 · 0 评论 -
将一句话里的单词进行逆置,标点符号不逆置
e.g "university of electronic science and technology of china“ 单词逆置为”china of technology and science electronic of university“void func(const char * pStr){ char *p1 = const_cast (pStr); int原创 2012-08-02 20:21:12 · 1901 阅读 · 0 评论 -
约瑟夫问题
typedef struct _Node{ int element; _Node * next;}Node;//约瑟夫问题-n(1, 2,...n)个人,从第k个报数,报数到m的那个人出列,//他的下一个人从1开始报数,报数到m的那个出列,以此类推void Josephus(int n, int k, int m){ //根据n创建循环链表 Node * head = (No原创 2012-07-10 20:13:43 · 724 阅读 · 0 评论 -
查找算法
一 . 静态查找表1. 顺序查找 算法思想:从表中第一个记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值比较相等,则查找成功;反之,若直至最后一个记录,其关键字和给定的值都不想等,则表明表中没有所查找的记录,查找失败。 性能:平均查找长度ASL=(n+1)/22. 二分查找(折半查找) --------前提必须是有序表,性能只有在均原创 2011-11-30 20:50:36 · 852 阅读 · 0 评论 -
动态创建二维数组
void D2Arry(int ** &p, int row, int col){ p = new int*[row]; // 分配一个指针数组,用于存储分别指向二维数组的每行行指针 int i; for (i= 0; i < row; i++) { p[i]= new int[col]; //分配每一行空间 } //.....对动态原创 2012-04-09 20:03:15 · 613 阅读 · 0 评论 -
归并排序
将待排序的元素序列分成两个长度相等的子序列,为每个子序列排序,然后再将它们合并成一个序列。合并两个子序列的过程称为两路归并,核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列。 一次2-路归并排序的算法://一次归并排序算法,k为子序列长度,n为数组长度void Merge(int * pArry, int *pTemp, int k, int n){ int i1,原创 2012-03-02 15:38:54 · 649 阅读 · 0 评论 -
选择排序法
1. 直接选择排序法 基本思想:每一趟(第i趟, i = 0, 1, 2, ......n-1)在后面n-i个待排序记录中选出关键字最小的记录,作为有序记录序列的第i个记录。直到第n-2趟完,待排记录只剩下一个,不完再选了!//直接选择排序法void SelectionSort(int * pArry, int iLen){ int i, j; int k; int原创 2012-01-11 21:01:01 · 9506 阅读 · 1 评论 -
插入排序
1. 直接插入法 思路:将一个记录插入到已排序号的有序表中。先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录其逐个进行插入,直至整个序列变成按关键字排列的有序序列。//pArry[i]表示当前要判定的元素,将其与其前面已排序好的所有元素相比,//计算出该元素需要插入的位置j,后移pArry[j]至pArry[i - 1]元素void InsertSort(int原创 2012-01-08 20:11:23 · 947 阅读 · 0 评论