数据结构
文章平均质量分 73
数据结构
橘猫吃不胖~
这个作者很懒,什么都没留下…
展开
-
JavaScript数据结构之链表
JavaScript数据结构之链表1 数组与链表的优缺点2 什么是链表3 封装链表结构4 向链表尾部添加一个新的项5 向链表某个位置插入一个新的项6 获取对应位置的元素7 获取元素在链表中的索引8 修改某个位置的元素9 从链表中删除某位置节点10 全部代码......原创 2022-08-13 12:13:42 · 214 阅读 · 0 评论 -
JavaScript快速排序
JavaScript快速排序1 思想2 代码1 思想快速排序是最慢的冒泡排序,它可以在一次循环中找出某个元素的正确的位置,并且该元素之后不需要任何移动,最重要的思想是分而治之。例如,对数组 [13,81,92,43,65,31,57,26,75,0] 进行排序第一步:我们在这个数组中选出了65(随便选的)第二步:将所有小于65的放在65的左边,将所有大于65的放在65的右边第三步:递归处理左边的数据,递归处理右边的数据第四步:排序完成在上面的步骤中,对于随机选出的65就叫做枢纽(也有人叫原创 2022-04-21 10:29:28 · 159 阅读 · 0 评论 -
JavaScript希尔排序
JavaScript希尔排序1 思路2 代码实现1 思路希尔排序是一种基于插入排序的快速排序算法,也成为缩小增量排序。简单插入排序对于大规模乱序数组很慢,因为元素只能一点一点地从数组的一端移动到另一端。希尔排序为了加快速度简单地改进了插入排序,同时该算法是冲破O(n2)的第一批算法之一。希尔排序是把数组按照一定的增量分组,对每组使用直接插入排序算法排序;然后缩小增量继续分组排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组被分成一组,再次排序,就可以完成整个数组的排序。增量的原创 2022-04-21 09:47:34 · 768 阅读 · 0 评论 -
JavaScript滑动窗口算法
JavaScript滑动窗口算法1 思想2 代码1 思想在力扣上刷题时经常可以看到这样的题,求XXX的子串、子数组、子序列等等,这类题一般使用滑动窗口来解决。本篇文章的思路学习了bilibili的up主红桃A士。情况一:寻找最长的①初始化左右指针left和right,左右指针之间的内容就是窗口,定义一个变量result记录当前的滑动窗口的结果,定义一个变量bestResult记录当前滑动窗口下的最优结果②right要向右逐位滑动循环③每次滑动后,记录当前滑动的结果。如果当前的结果符合条件,则更原创 2022-04-09 22:41:22 · 3110 阅读 · 0 评论 -
JavaScript选择排序
JavaScript选择排序1 思想2 代码1 思想选择排序思想如下:找到数组中最大(最小)的元素;将该元素与数组中第一个元素交换位置(如果第一个元素就是最大或者最小的元素那么就和自己交换位置)在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。从上面的过程可以看出,选择排序在不断地选择剩余元素中的最大(小)者。例如,当前有数组 [4, 7, 2, 8, 0, 3] 从小到大排序,它的选择排序过程如下:步骤数组说明1[原创 2022-04-02 13:42:49 · 2941 阅读 · 2 评论 -
数据结构队列概述
数据结构队列概述1 认识队列2 队列的常见操作3 击鼓传花实例4 优先级队列1 认识队列队列是受限的线性表,先进先出(FIFO,First In First Out),受限之处在于它只允许在表的前端进行删除操作,在表的后端进行插入操作。在生活中队列结构也很常见,比如说排队的时候,某人先排队,那么他的问题就会被先解决,某人后来,他的问题就被后解决。队列示意图:队列有两种实现方案:①基于数组实现;②基于链表实现2 队列的常见操作enqueue(element):向队列尾部添加一个(或多个)新的原创 2022-03-02 19:14:38 · 154 阅读 · 0 评论 -
栈结构概述
栈结构概述1 认识栈结构2 通过实例理解栈3 实现栈结构1 认识栈结构我们都知道数组是一种线性结构,并且可以在任意位置插入和删除数据。但是有时为了实现某些功能,我们必须对这种任意性加以限制。而栈和队列就是常见的受限的线性结构。栈是一种受限的线性表,后进先出。其限制是仅允许在表的一端进行插入和删除操作,这一端被称为栈顶,另一端称为栈底。LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间。向一个栈插入新元素又称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新原创 2022-03-01 13:10:27 · 3203 阅读 · 0 评论 -
数据结构概述与时间复杂度分析
数据结构概述1 基本概念2 例题分析1 基本概念数据:是信息的载体,它能够被计算机识别、存储和加工处理。数据元素:是数据的基本单位。有时一个数据元素包括若干个数据项。数据结构:指的是数据之间的相互关系,它一般包括以下三个方面的内容:数据的逻辑结构:数据元素之间的逻辑关系。数据的存储结构:数据元素及其关系在计算机存储器内的表示。数据的运算:对数据施加的操作。数据的逻辑结构:是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。它有两大类:线性结构:若结构是非空集,则有且仅有一个原创 2022-02-28 14:59:33 · 513 阅读 · 0 评论 -
JavaScript插入排序
JavaScript插入排序1 思想2 代码1 思想插入法排序通过构建有序数组元素的存储,对未排序的数组元素,在已排序的数组中从最后一个元素向第一个元素遍历,找到相应位置并插入。插入法排序基本思想:假设第一个数是有序的,剩余的数是无序的选择第二个数与第一个数进行比较,如果第二个数比第一个数小,则交换两个数的位置,如果第二个数比第一个数大,则位置不发生变动选择第三个数与第二个数进行比较,如果第三个数小于第二个数,则交换两个数的位置,然后用第二个数与第一个数进行比较,如果第二个数小于第一个数,交换原创 2021-11-19 19:45:00 · 995 阅读 · 1 评论 -
冒泡排序思想及代码实现
冒泡排序基本思想1、每次将相邻两个数比较,如果第一个大于第二个数,则交换这两个数,否则不变。2、如果有n个数,则要进行n-1趟比较。3、在第一趟比较中要进行n-1次两两比较,则第一趟下来最后一个数是最大的,不用参与接下来的比较,于是在第二趟比较中要进行n-2次比较,…,在第j趟比较中要进行n-j次两两比较。该排序算法的时间复杂度为O(n2)。从小到大排序示例:将数组中元素从小到大输出var a = [10, 7, 5, 27, 98, 31]; // 定义一个数组console.log原创 2021-11-19 22:00:00 · 269 阅读 · 0 评论 -
线性表算法设计举例
【2-4】构造一个顺序表的删除算法,把顺序表L中的数据元素x删除。若删除成功则返回1,若删除失败则返回0。【算法思想】可以通过一个循环比较过程来实现。当比较过程中找到数据元素x后,删除之。算法设计如下:int ListDataDelete(SeqList *L,DataType x){ int i,j; for(i=0;i<L->size;i++)//寻找数据元素 if(x==L->size[i]) break; if(i==L->size) return 0;//未原创 2020-11-25 11:10:49 · 466 阅读 · 0 评论 -
线性表——双向循环链表
双向循环链表结点的结构体定义如下:typedef struct Node{ DataType data; struct Node *next; struct Node *prior;}DLNode;(1)初始化ListInitiate(DLNode **head)void ListInitiate(DLNode **head){ *head =(DLNode *)malloc(sizeof(DLNode)); (*head)->prior=*head;//构成前驱指针循环链表原创 2020-11-25 09:24:41 · 123 阅读 · 0 评论 -
线性表——单链表
1、单链表的结点定义typedef struct Node{ DataType data; struct Node *next;}SLNode;2、初始化ListInitiate(SLNode **head)void ListInitiate(SLNode **head)//初始化 { *head=(SLNode *)malloc(sizeof(SLNode));//申请头结点,由head指示其地址 (*head)->next=NULL;//置结束标记NULL }3、求当原创 2020-11-24 00:00:17 · 767 阅读 · 0 评论 -
顺序表概述
顺序表概述1 顺序表的概念2 顺序表的存储结构3 示例1 顺序表的概念顺序表示线性表的顺序存储结构,即按顺序存储方式构造的线性表的存储结构。对于有n个元素的顺序表A,可以表示为A[0…n-1],其下标从0到n-1,A[0]称为第1个元素,A[1]称为第2个元素,…A[n-1]称为第n个元素。2 顺序表的存储结构#define MaxLen 50typedef int elemtype; // 定义elemtype为int类型typedef elemtype sqlist[MaxLen]; //原创 2020-11-13 09:46:33 · 740 阅读 · 0 评论 -
C语言基础——结构体
编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录。#include<stdio.h>#define N 5//定义N的值为5struct student//定义一个student结构体{ char num[6]; char name[8]; int score[3];}stu[N];void main(){ int i,j; int print(struct student stu[5]); for(i=0;i<N;i++)//循环原创 2020-11-11 11:33:56 · 148 阅读 · 0 评论 -
C语言基础——指针
例一:指针与普通变量的关系#include<stdio.h>int main(){ int a,b;//定义两个整数变量 int *p1=&a,*p2=&b;//将a和b的值放在指针中 printf("input a,b:\n"); scanf("%d,%d",p1,p2);//输入两个值 printf("\na=%d b=%d\n*p1=%d *p2=%d",a,b,*p1,*p2);//输出a、b、*p1、*p2的值 printf("\n&a=%x原创 2020-11-11 10:43:08 · 465 阅读 · 1 评论