数据结构

LWIP_ARP协议(1缓存表数据结构)

橙三吉。 提交于 2020-03-12 11:53:31
前言 从前面的文章,我们知道,ARP协议的核心是ARP缓存表,而ARP协议的实质就是对缓存表项(entry)的建立、更新、查询等操作。 那么,LwIP中是是怎么实现ARP协议的呢? ARP缓存表的数据结构 LwIP使用一个arp_table数组描述ARP缓存表,数组的内容是表项的内容,每个表项都必须记录一对IP地址与MAC地址的映射关系,此外还有一些基本的信息,如表项的状态、生命周期(生存时间)以及对应网卡的基本信息,LwIP使用一个etharp_entry结构体对表项进行描述。 而且LwIP预先定义了缓存表的大小,ARP_TABLE_SIZE默认为10,也就是最大能存放10个表项,由于这个表很小,LwIP对表的操作直接采用遍历方式,遍历每个表项并且更改其中的内容。 static struct etharp_entry arp_table [ ARP_TABLE_SIZE ] ; struct etharp_q_entry { struct etharp_q_entry * next ; struct pbuf * p ; } ; struct etharp_entry { # if ARP_QUEUEING /** 指向此ARP表项上挂起的数据包队列的指针. */ struct etharp_q_entry * q ; # else /* ARP_QUEUEING */ /**

数据结构与算法复习笔记一

倾然丶 夕夏残阳落幕 提交于 2020-03-12 08:56:30
一.基本数据结构 1.数组、字符串 优点: 构建一个数组非常简单 能让我们在O(1)的时间里根据数组下标查询某个元素 缺点: 构建时必须分配一段连续的空间 查询、删除、添加某个元素时须遍历整个数组 2.链表 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。 双链表:双链表的每个结点中都含有两个引用字段。 优点:灵活分配空间 缺点:查询元素需要O(n)时间 解题技巧: 利用快慢指针(有时需要三个指针) 加链表头 例如: 两个排序链表进行整合排序 将链表的奇偶数按原定顺序分离,生成前半部分为奇数,后半部分为偶数的链表 3.栈 特点:后进先出 算法基本思想: 可以用一个单链表实现 只关心上一次操作 处理完上一次操作后,能在O(1)时间内查找到更前一次的操作。 4.队列 特点:先进先出 双链表实现 常用场景: 广度优先搜索 5.树 特点:结构直观 常考算法:递归 常考树的形状: 普通二叉树 平衡二叉树 完全二叉树 二叉搜索树 红黑树 树的遍历应用场景: 前序遍历:多应用于树的创建和搜索 中序遍历:二叉搜索树 后序遍历:在对某个节点进行分析的时候,需要来自左子树和右子树的信息。 二.高级数据结构 1.优先队列 与普通队列区别: 保证每次取出的元素是队列中优先级最高的 优先级别可自定义 常用场景: 从杂乱无章的数据中按照一定的顺序(或优先级

(数据结构)顺序存储的线性表

我是研究僧i 提交于 2020-03-12 07:05:35
---恢复内容开始--- 推荐一本学习书籍:程杰的《大话数据结构》。 既然是数据结构,那什么是数据结构呢?这里补充一些基本术语和概念。 数据结构: 是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 数据: 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号总集。 数据元素: 是组成数据、有一定意义的基本单位,在计算机中通常作为整体处理。也成为记录。 数据项: 一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。 数据对象: 是性质相同的数据元素的集合,是数据的子集。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构:是指数据对象中数据元素之间的相互关系。 集合结构:集合结构中的数据元素除了属于同一个集合外,它们之间没有其他关系。 线性结构:线性结构中的数据元素之间是一对一的关系。 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。 图形结构:图形结构的数据元素是多对多的关系。 物理结构:是指数据的逻辑结构在计算机中的存储形式 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据将的逻辑关系和物理关系是一致的。 链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。 数据类型

蔡奇宏软件工程第一次作业

最后都变了- 提交于 2020-03-12 06:45:42
1.软件专业术语 [1] 软件=程序+软件工程 程序 =数据结构+算法 软件企业=软件+商业模式 [2] 软件构架( Software Architecture ) 软件设计与实现( Software Drsign,Implementation and Debug ) 源代码管理( Source Code Control ) 配置管理( Software Configuration Management ) 质量保证( Quality Assurance ) 软件测试( Test ) 需求分析( Requirement Analysis ) 程序理解( Program Comprehension ) 软件维护( Software Maintenance ) 服务运营( Service Operation ) 软件的生命周期( Software Maintenanec ) 服务运营( Service Operation ) 软件的生命周期( Software Life Cycle,SLC ) 软件项目负责的管理( Project Management ) 用户体验( User Experience ) 国际化和本地化( Globalization & Localization ) [3] 复杂性( Complexity ) 不可见性( Invisibility ) 易变性(

数据结构与算法——删除排序表中的重复元素

与世无争的帅哥 提交于 2020-03-12 02:31:02
题目 解题 设置两个节点newhead,newnext,newnext用于遍历链表中的所有元素,newhead通过判断newhead.val与newnext.val是否相等,指向不重复的元素,达到删除重复元素的效果。 注意遍历结束后要将newhead.next=null,否则若原链表最后两个元素相等,删除后的新链表会保留该重复元素。 public ListNode DeleteDuplicates ( ListNode head ) { if ( head == null || head . next == null ) { return head ; } ListNode newhead = head ; ListNode newnext = head . next ; while ( newnext != null ) { if ( newhead . val != newnext . val ) { newhead . next = newnext ; newhead = newnext ; } newnext = newnext . next ; } newhead . next = null ; return head ; } 来源: CSDN 作者: Leeyayai 链接: https://blog.csdn.net/qq_44425179/article

js数据结构与算法存储结构

孤街醉人 提交于 2020-03-12 01:50:30
数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合。 传统上,我们把数据结构分为逻辑结构和物理结构。 逻辑结构: 是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。 物理结构: 是指数据的逻辑结构在计算机中的存储形式。 常用的数据结构有: 数组,队列(queue),堆(heap),栈(stack),链表(linked list ),树(tree),图(graph)和散列表(hash) 栈(stack):运算只在表的一端进行;队列(Queue):运算只在表的两端进行。 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 与栈相反,队列是一种先进先出(First In First Out, FIFO)的线性表。 与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础。 四大结构 集合结构 线性结构 树形结构 图形结构 顺序存储和链式存储 数据元素的存储结构形式有两种:顺序存储和链式存储。 例如我们编程语言的数组结构就是这样滴。 链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。 链式存储结构 线性表 线性表:就好像是排队一样,具有线一样性质的结构,它是由零个或多个数据元素组成的有限序列。 若元素存在多个

python数据结构与算法基础名词积累

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-12 01:47:23
记录: 算法,很早之前,我就知道是特别重要一环;但是,今天,看到一个简单例子,第一次被震撼了。 算法: 算法是独立存在的一种解决问题的方法和思想。 算法五大特性: 输入: 算法具有0个或多个输入 输出: 算法至少有1个或多个输出 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成 确定性:算法中的每一步都有确定的含义,不会出现二义性 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成 大O记法: 对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n)=O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,亦即函数f与函数g的特征相似。 时间复杂度: 假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)。 时间复杂度排序: 最优时间复杂度: 算法完成工作最少需要多少基本操作。 最坏时间复杂度: 算法完成工作最多需要多少基本操作。 平均时间复杂度: 算法完成工作平均需要多少基本操作。 时间复杂度的几条基本计算规则: 1.基本操作,即只有常数项,认为其时间复杂度为O(1)。 2.顺序结构

【数据结构】查找

风流意气都作罢 提交于 2020-03-11 23:15:00
平均查找长度(ASL, Average Search Length): 在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字比较次数的平均值,(即 ASL= \(\sum\) 查找概率*比较次数 )(一般为等概率1/n) 静态查找表: 查找表的操作无需动态地修改查找表,如 顺序查找、折半查找、散列查找等。 动态查找表: 需要动态地插入或删除的查找表,如 二叉排序树、二叉平衡树、B树、散列查找等。 线性结构 顺序查找 适用条件: 适用于 线性表 基本思想: 从线性表的一段开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定的条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。 具体实现: typedef struct { //查找表的数据结构 ElemType *data; //元素空间基址,建表时按实际长度分配,0号单元留空 int length; //表的长度 }List; //Sequential Search Table //在顺序表L中顺序查找关键字为key的元素。若找到则返回该元素在表中的位置 int Search_Seq(List L, ElemType key) { L.data[0] = key; //“哨兵” for(i = L

R语言的基本数据结构

旧街凉风 提交于 2020-03-11 16:14:37
1、向量 向量是用于存储数值型、字符型或逻辑性数据的一维数组,执行组合功能的函数c()可用来创建向量 下面创建向量a,并对其进行运算 > a<-c(2,3,4) > a [1] 2 3 4 > a*a [1] 4 9 16 > a*(-a) [1] -4 -9 -16 2、矩阵 矩阵是一个二维数组只要每个元素拥有相同的模式,可通过函数matrix创建矩阵 一般的格式:newmatrix<-matrix(vector,nrow=numbers_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rownames,char_vector_colnames)) 上面的各个参数解释: vector:表示是一个向量,包含了矩阵的元素 nrow和ncol用以指定行和列的维数 dimnames包 列名含了可选的、以字符向量表示的行名 byrows表示矩阵式按行填充(byrows=TRUE)还是按列填充(byrows=FALSE).默认按行 1、创建一个矩阵 > y<-matrix(1:20,nrow=5,ncol=4) > y [,1] [,2] [,3] [,4] [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 13 18 [4,] 4 9 14 19 [5,]