数据结构与算法
文章平均质量分 70
Yengi
they say it's a matter of time!
谢谢关注,欢迎交流分享。
展开
-
算法复杂度(时间复杂度、空间复杂度)
文章目录时间复杂度空间复杂度算法时间复杂度定义在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增 大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。这样用大写O( )来体现算法时间复杂度的记法,我们称之为大O记法。一般情况下,随着n的增大,T(n)增长最慢的算法为原创 2022-05-27 16:40:09 · 151 阅读 · 0 评论 -
数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现
文章目录查找二分查找(折半查找)插值查找斐波拉契查找注意:查找查找是在大量的信息里面寻找一个特定的信息元素(1)静态查找和动态查找;静态或者动态都是针对查找表而言的。动态表指查找表中有删除和插入操作的表(2)无序查找和有序查找。无序查找:被查找数列有序无序均可;有序查找:被查找数列必须为有序数列。二分查找(折半查找)说明:元素必须是有序的,如果是无序的则要先进行排序操作基本思想:也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等原创 2022-05-27 15:52:47 · 788 阅读 · 0 评论 -
数据结构排序算法 内部排序(冒泡、鸡尾酒、选择、简单插入、二分插入、快排、希尔、归并、堆排)C语言实现
文章目录排序冒泡排序鸡尾酒排序选择排序:排序冒泡排序1、比较相邻的元素,如果前一个比后一个大或者小,就把它们两个交换位置。2、对每一对相邻的元素做同样的工作,从开始第一对到最后一对,这步做完之后,最后的元素会是最大或者最小的数。3、针对所有的元素重复以上的步骤,除了最后一个4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。空间复杂度:O(1)时间复杂度:O(n^2)void swap1(int *a,int i,int j){ int tmp = a[i];原创 2022-05-25 18:43:17 · 198 阅读 · 0 评论 -
树的特点及相关操作
文章目录树树的特点:二叉树二叉树的特点:BST 就是二叉搜索树(Binary Search Tree)实现二叉树自平衡树AVL树 树,指的是在一堆数据中,包含一个被称为根的节点,其他的节点组成若干棵树,成为根节点的后继 A) 双亲节点(parent)和孩子节点(children):一个节点的后继节点被称为该节点的孩子,相应地该节点被称为这些孩子的双亲。比如上图中的 A 是 B、C 和 D 的双亲,而 B、C 和 D 都是 A 的孩子 B) 兄弟节点(sibling):拥有原创 2022-05-23 19:10:18 · 902 阅读 · 0 评论 -
栈、队列的应用(栈实现队列,队列实现栈,球钟问题)
栈、队列的应用 C语言1.用两个栈来实现一个队列#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int DataType;//数据节点结构体typedef struct node{ DataType data; //数据 struct node *next; //指针}LinkNode;//管理结构体typedef struct stack{ stru原创 2022-05-20 19:18:18 · 308 阅读 · 0 评论 -
队的特点及相关操作
1、队列特点(FIFO) 数据满足“先进先出,后进后出”存取特点的数据结构 (1)逻辑结构:线性 (2)存储结构:顺序,链式 (3)运算:初始化,入队,出队,对空,队满判断(顺序队列)顺序队列队列管理结构体#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int DataType;//队列管理结构typedef struct no原创 2022-05-19 20:37:20 · 315 阅读 · 0 评论 -
栈的特点和相关操作
1.栈的特点(LIFO) 数据存取关系满足“后进先出,先进后出”的特点的数据结构 逻辑结构:线性 存储结构:顺序存储、链式存储 算法:初始化、压栈、出栈、栈空、栈满判断(顺序栈)如果有1 2 3 三个数据,依次入栈,出栈情况,错误的是?A 1 2 3B 1 3 2C 2 3 1D 2 1 3E 3 2 1F 3 1 22、顺序栈存储结构连续的,用数组的方式顺序栈的管理结构体#include <stdio.h>#include &l原创 2022-05-19 20:24:08 · 1931 阅读 · 0 评论 -
栈的应用:括号匹配(C语言)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef char DataType;//数据节点结构体typedef struct node{ DataType data; struct node *next;}LinkNode;//管理结构体typedef struct stack{ LinkNode *top; //栈顶偏移 int size; //原创 2022-05-19 15:46:02 · 328 阅读 · 0 评论 -
linux内核链表,内核链表详解,内核链表封装
常规链表的缺陷 传统的双向循环链表概念简单,操作方便,但存在有致命的缺陷,用一句话来概括就是:每一条链表都是特殊的,不具有通用性。换句话说,对于每一种不同的数据,所构建出来的传统链表都是跟这些数据相关的,所有的链表操作函数也都是数据相关的,换一种数据节点,则所有的操作函数都需要一一重写编写,这种缺陷对于一个具有成千上万种数据节点的工程来说是灾难性的,是不可接受的Linux内核链表的原理(1)把传统链表中的“链”抽象出来,使之成为一条只包含前后指针的纯粹的双循环链表,这样的链表由于不含原创 2022-05-18 13:56:18 · 1026 阅读 · 0 评论 -
约瑟夫环问题,单向循环链表解决
#include <stdio.h>#include <stdlib.h>typedef int Datatype;typedef struct Node{ Datatype data; struct Node *next; }ListNode;ListNode * InitNode(Datatype data) //带数据的头节点{ ListNode * head=(ListNode *)malloc(sizeof(ListNode)); if(he原创 2022-05-17 11:11:56 · 169 阅读 · 0 评论 -
数据结构之链表操作(单链表,单向循环链表,双向循环链表)查找节点,插入节点,删除节点,更新节点,新建节点,遍历,清空,判断空链表等操作
一、线性表线性表结构的数据是依次排列(一对一)(1)顺序结构:数组,顺序栈,顺序队列(顺序表)(2)链式存储:链表,链式栈,链式队列(线性表)二、链表2.1、链表 链表是一种具体的数据结构 1、逻辑上:一对一的排列 2、存储上:非连续的 3、算法:查找节点,插入节点,删除节点,更新节点,新建节点,遍历,清空,判断空链表等等 4、链表分类 单向链表,双向链表,单向循环链表,双向循环链表 5、链式存储特点 不需要一块连续原创 2022-05-16 20:15:28 · 1970 阅读 · 0 评论