数据结构与算法
数据结构与算法
HackerLZH
Big Data,AI,WEB development,which can I make more money by? I will grasp the lifeblood of the time!
展开
-
基数排序(Java实现)
基数排序是一种高级排序算法。基数排序需要进行d趟分配和收集,一趟分配需要O(n),一趟收集需要O( r ),所以基数排序的时间复杂度为O(d(n + r))原创 2022-01-13 12:22:34 · 506 阅读 · 0 评论 -
快速排序(Java实现 )
快速排序是一种高级排序算法,是内部排序中性能最好的排序算法。原创 2022-01-13 09:12:35 · 4503 阅读 · 4 评论 -
单链表(Java实现)
单链表的Java实现原创 2022-01-12 10:08:02 · 139 阅读 · 0 评论 -
归并排序(Java实现)
归并排序是一种高级排序算法,适用于外部排序,时间复杂度为O(nlogn),但是由于必须引入辅助数组,空间复杂度为O(n)原创 2022-01-11 14:36:29 · 444 阅读 · 0 评论 -
堆排序代码详解(Java实现)
堆排序是一种高级排序算法,时间复杂度为O(nlogn),空间复杂度仅为O(1),对于海量数据使用堆排序是相当高效的。原创 2022-01-11 10:55:19 · 1644 阅读 · 0 评论 -
希尔排序在三种著名增量下的时间性能比较
希尔排序是什么?希尔增量最坏时间复杂度:O(n^2)教材上都是以希尔增量为例子 => [N/2, (N/2)/2, …]void shellSort1(int[] arr){ for (int gap = arr.length / 2; gap > 0; gap /= 2){ //排序趟数 for (int i = gap; i < 2 * gap; i++) { //每趟排序组数 //每组使用直接插入排序原创 2022-01-09 17:23:07 · 733 阅读 · 0 评论 -
希尔排序(Java实现)
这里只提供代码,建议彻底弄懂直接插入排序和希尔排序思想后再来看代码。某园的一篇希尔排序图解很清晰。 //希尔排序(希尔增量)(移动式)(避免频繁交换) void shellSort(int[] arr){ for (int gap = arr.length / 2; gap > 0; gap /= 2){ //排序趟数 for (int i = gap; i < 2 * gap; i++) { //每趟排序组数原创 2022-01-09 12:19:46 · 577 阅读 · 0 评论 -
栈应用之行编辑程序(C语言)
void LineEdit(){ Stack S; InitStack(S); char ch; printf("请输入...\n"); fflush(stdout); ch = getchar();//获取输入字符 while (ch != EOF){ while (ch != EOF && ch != '\n'){ ELEMTYPE e; switch (ch){ case '#': if (StackEmpty(S)){//栈空时不能退格原创 2021-03-31 20:21:55 · 1049 阅读 · 0 评论 -
栈应用之汉诺塔问题(C语言)
描述在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:每次只能移动一个盘子;盘子只能从柱子顶端滑出移到下一根柱子;盘子只能叠在比它大的盘子上。核心思想栈 + 分冶(=>递归)代码//A中只剩一个元素时,从A移到Cvoid AtoC(Stack &A, Stack &C, ELEMTYPE &e){ Po原创 2021-03-30 21:49:43 · 1445 阅读 · 0 评论 -
栈应用之括号匹配(C语言)
条件给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。代码void bracketmatch(){ char *str = (char*)malloc(sizeof(char)*10); printf("请输入要匹配的括号组:"); fflush(stdout);//清空输出缓冲区(否则我上面打印不出来) scanf("%s", str); int le原创 2021-03-30 20:17:42 · 549 阅读 · 0 评论 -
单链表应用之一元多项式相加(C语言)
实际上一元多项式的数据结构仍然是一条单链表,不过是此时的每个结点代表多项式的每一项,结点的数据域被细分成了系数域和指数域。而多项式相加的操作就相当于有序单链表的归并操作。代码:#include <stdio.h>#include <stdlib.h>typedef struct{//项的类型(数据域) float coef;//系数 int expn;//指数} Data;typedef struct node {//链表(一元多项式)类型 Data data;原创 2021-03-29 20:15:27 · 2473 阅读 · 1 评论 -
通过尾指针合并俩循环链表(C语言)
#include <stdio.h>#include <stdlib.h>#include <ctime>typedef struct node{ int data; struct node *next, *rear;//直接给结点开辟尾指针域,但是只有头结点真正使用了}node, *CircularList;int random(int min, int max);//生成随机数void InitList(CircularList &C);/原创 2021-03-28 19:36:01 · 747 阅读 · 0 评论 -
通过双向链表找前驱的方法计算一定范围的随机整数出现的比例,探索C语言rand()的性能
代码#define MAXSIZE 1000int random(int min, int max){ return rand() % (max - min + 1) + min;}void randNumPercent(LinkedList L){ srand((unsigned int)time(NULL)); int *a = (int*)malloc(sizeof(int)*MAXSIZE); for (int j = 0; j < MAXSIZE; j++){ int原创 2021-03-24 14:19:31 · 156 阅读 · 0 评论 -
反转单链表(C语言实现)
必要性:单链表是一种数据结构,反转单链表问题经常会出现在面试当中,所以我们一定要掌握!代码:typedef struct node { int data; int length; struct node* next;} node, *LinkList;void reverse(LinkList &L){//L是头节点 if(L->next == NULL) printf("链表为空,不能反转!\n"); else if (L->next->next == N原创 2021-03-23 21:37:29 · 653 阅读 · 0 评论