数据结构与算法分析
文章平均质量分 65
Len1Mi
知其黑,守其白
展开
-
Prim算法和Kruskal算法比较
Prim算法与Kruskal算法都是用来求连通网的最小生成树问题的方法。首先让我们来创设一个情景:某营业厅接到一个单子,要求给一所学校新建校区安装宽带该学校教学楼、宿舍分别用(A, B, C, D, E, F, G)来代表问:如何修路保证各个站点都能连通,并且线路最短Prim算法1).输入:一个加权连通图,其中顶点集合为V,边集合为E;2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;3).重复下列操作,直到Vnew = V: a.在集原创 2022-05-02 10:05:28 · 3470 阅读 · 0 评论 -
十进制转二进制(链栈)
老师讲完栈之后给留了一道题,要求我们用栈把十进制转换为二进制。大体思路就是十进制数取余二,然后把余数放进栈中。然后再把栈输出,代码如下#include <stdio.h>#include <stdlib.h>typedef struct linkedstack{ int data; struct linkedstack* next;}linked;void TypeChange(int num);int main(){ int num;原创 2022-03-23 07:44:17 · 1246 阅读 · 0 评论 -
什么是递归?
先给大家看两张图片原创 2022-03-19 15:46:17 · 596 阅读 · 0 评论 -
数据结构与算法分析----单链表增加 删除 查找 求表长 判空 逆置 合并 链接
逆置采用头插法逆置#include <stdio.h>#include <stdlib.h>typedef struct node{ int data; struct node* next;} node;node* linkedlist_init();void linkedlist_destory(node* head);int linkedlist_insert(node* head, int pos, int x);int linked.原创 2022-03-07 20:00:31 · 418 阅读 · 0 评论 -
数据结构与算法分析----顺序表建立、销毁、插入、删除、查找、删除重复元素、合并两个有序表
老师布置的作业,浅写一下吧其中删除重复元素运用了三种方法#include <stdio.h>#include <stdlib.h>typedef struct sqlist{ int max; int length; int* data;} sqlist;int sqlist_init(sqlist* list, int max, int num);int sqlist_destory(sqlist* list);int sqlist_insert(.原创 2022-03-06 19:39:19 · 943 阅读 · 0 评论 -
数据结构与算法06----查找
二分查找(折半查找)在长度为n的 有序 顺序表List中顺序查找一个目标值 => O(n)很慢,为什么慢?因为每次比较判断只排除了一个元素,完全没有利用表的有序性二分查找:在比较失效时,利用表的有序性排除 待查找元素 的一半每次排除一半 => O(lg(n))算法流程:用 l 和 r 表示待查找范围的左右边界,初始时 l = 0,r = n - 1循环以下操作直至 l > r:找当前搜索范围的正中间: mid = (l + r) / 2判断原创 2022-01-27 16:45:49 · 479 阅读 · 0 评论 -
数据结构与算法05----图
图的基本概念(多对多的逻辑结构)假设ABCDEFG是7个电话,之间的连线表示修有通信线路电话就是图的顶点 vi∈V,通信线路是边 ei∈E,G = {V,E}就是一个图只要两个电话间有线路,就可以相互通话 => 无向图电话(顶点)连接的线路(边)数量:度ABCDE和GF之间消息无法传递:不连通ABCDE和GF是两个连通分量假设ABCDE是五个电话,之间的连线表示修有通信线路,数字表示该线路的电话费不同通信线路上的电话费不同:加权图假设ABCDE是五个城市,带箭头连线表示该方向上原创 2022-01-25 15:02:12 · 822 阅读 · 1 评论 -
数据结构与算法04----树和二叉树
树和森林树:一对多的结构(可1对0,1对1,1对多),有一个起点 ‘根结点’结点:树的一个数据元素孩子:1对多里的 ‘多’子树:以某个孩子结点为根的一棵树叶子结点:没有孩子的结点森林:多棵树二叉树二叉树:每个结点至多有两个孩子(可以1个或0个),分别称为左孩子和右孩子左孩子(若有)是左子树的根,右孩子(若有)是右子树的根高度(深度):最深的叶子结点所在层数 二叉树的重要性质第i层至多有2 ^ (i - 1)个结点高度为h的树至多有2 ^ h - 1个结点Key1原创 2022-01-21 16:04:47 · 772 阅读 · 0 评论 -
数据结构与算法03----(字符)串
(字符)串串是一个特殊的线性表,其数据元素全是单个元素,也称字符串:“abcd112_!”长度为零的串里什么都没有,叫空串:“”全由空格组成的串叫空格串,空格也是字符,空格串≠空串:“ ”或“_ _”(_表示空格)回文串长度为L的字符串的索引范围:[1,L]或[0,L - 1]回文:如“上海自来水来自海上”索引从0开始:s[i] == s[L - i - 1]索引从1开始:s[i] == s[L - i + 1]字符串匹配给定一个主串s,和一个模式串t,返回t首次在s中出现的原创 2022-01-19 08:25:02 · 214 阅读 · 0 评论 -
数据结构与算法02----栈和队列
栈和队列的特性栈:后进先出 LIFO(Last In First Out)栈:受限制的线性表,只允许从表的一端操作,这端称为栈顶,另一端为栈底压入元素(push):往栈顶新增一个元素,新元素成为新栈顶弹出元素(pop):移除栈顶元素,原栈顶下的元素成为新栈顶 / 或栈变为空栈栈内操作[ ]push(1)[1]push(2)[1,2]push(3)[1,2,3]pop()[1,2]push(4)[1,2,4]连续pop()三原创 2022-01-12 15:13:51 · 390 阅读 · 0 评论 -
数据结构与算法01----线性表
线性表 [逻辑结构] 的顺序存储和链式存储 [存储结构(物理结构)]Key 1:线性表是指各数据元素间保持“1对1”关系的数据结构Key 2:线性表分为顺序表(数组)和链表,分别通过元素相邻和保存指针域的方式来实现“1对1”线性表的基本操作:顺序表、(单) 链表查找(定位)元素:按值查找给定长度为 n 的线性表,查找值为 v 的元素(最坏)从头到尾遍历 => 时间复杂度O(n)顺序表新增 / 删除元素给定长度为 n 的顺序表,在指定位置 i 插入一个新元素给定长度原创 2022-01-07 10:03:10 · 669 阅读 · 0 评论 -
数据结构与算法分析00----基础概念
逻辑结构与存储结构逻辑结构描述数据元素之间的关系(一对一、一对多、多对多……)一种逻辑结构可以用多种物理结构来实现物理结构影响逻辑结构上的各种操作的复杂度。存储结构描述实际存放数据元素的物理结构算法与复杂度算法:做一件事的步骤 => 有穷、确定、可行(特性) => 正确、可读、健壮、高效(评价标准)(最坏)复杂度:时间复杂度:给定输入规模n,在最坏情况下需要多少时间一定能做完空间复杂度:给定输入规模n,在最坏情况下需要多少额外空间一定能做完复杂度是一个保证,一个承诺,用原创 2022-01-06 10:15:30 · 178 阅读 · 0 评论