就是那个数据结构

数据结构入门学习之数据结构学些什么? 首先在学习之前,我们先要了解通常计算机在解决一个问题具体有哪些步骤,见下图 而第一步将具体问题抽象为数学模型的实质是: 而这一步正是我们数据结构所学习的内容。 早期计算机只能做一些 ... 阅读详情

少年的肩应担负起草长莺飞和清风明月,女孩的眼应藏下星辰大海和万丈光芒

晚安之后,有时候想你想得睡不着,有时候不想你睡不着


目录

数据结构的基本概念

线性表

顺序表

单链表

循环单链表

双向循环链表

栈

顺序栈


数据结构的基本概念

待写。。。

线性表

顺序表

有n个元素的顺序表,第i个位置上插入一个元素需要移动表中n-i+1个数据元素,删除第i个文字上的数据元素需要移动表中n-i个元素

1.数据集合的描述

typedef struct
{
    DataType list[Maxsize];
    int size;
}SeqList;

2.初始化

void ListInitate(SeqList *L)
{
    L->size=0;
}

3.求当前数据元素个数

int ListLength(SeqList *L)
{
    return L->size;
}

4.插入数据元素

int ListInsert(SeqList *L,int i,Datatype x)
{
    int j;
    if(L->size==Maxsize)
        return 0;
    else if(i<0 || i>Maxsize)
        return 0;
    else{
        for(j=L->size-1;j>=i;j--)
            L->list[j+1]=L->list[j];
        L->list[i]=x;
        L->size+=1;      //元素个数加一不要忘记
        return 1;
    }
}

5.删除数据元素

int ListDelete(Sqlist *L,int i,DataType *x)
{
    int j;
    if(L->size==0)
        return 0;
    else if(i<0||i>Maxsize)
        return 0;
    else{
        *x=L->lisst[i]   //将被删除的元素保存到x中
        for(j=i;j<L->size;j++)
            L->list[j]=L->list[j+1];
        L->list[j]=NULL;
        L->size--;
        return 1;
    }
}

6.取出数据元素

int ListGet(SeqList L,int i,DataType *x)
{
    //此处省略对i不合法的判断
    *x=L->list[i];
    return 1;
}

向数据表中插入数据是,平均移动次数为n/2

删除一个元素平均移动次数为n-1/2

插入与删除操作时间复杂度均为O(n),其余均为O(1)

单链表

1.单链表结点

typedef struct Node
{
    DataType data;
    struct Node *next;
}SLNode;

2.初始化

void ListInitiate(SLNode **head)
{
    *head=(SLNode *)malloc(sizeof(SLNode));
    (*head)->next=NULL;
}

3.求当前数据元素的个数

int ListLength(SLNode *head)
{
    int size=0;
    SLNode *p=head;
    while(p)
    {
        size++;
        p=p->next;
    }
    return size;
}

4.在第i个数据元素前插入数据元素x

int ListInsert(SLNode *head,int i,DataType x)
{
    SLNode *p=head,*q;
    int j;
    while(p && j<=i-1)//找到i所在元素的前一个元素
    {
        p=p->next;
        j++;
    }
    if(j+1 !=i) //判断i是否合法
        return 0;
    q=(SLNode *)malloc(sizeof(SLNode));
    q->data=x;
    q->next=p->next;
    p->next=q;
    return 0
}

5.删除i位置的元素

int ListDelete(SLNode *head,int i,DataType *x)
{
    SLNode *p=head,*q;
    int j;
    //此处省略查找i元素之前的结点并判断i是否合法的代码
    *q=p->next
    *x=q->data;
    p->next=p->next->next;
    free(q); //释放空间不要忘记
    return 1;
}

6.取数据元素,过程同5

7.销毁单链表,while循环,调用free()即可;

循环单链表

初始化时 *head->next=head

遍历时 *p->next=*head结束遍历

双向循环链表

结构体定义中除了DataType data;还有前后指针struct Node *next;struct Node *prior;

初始化时head=(Node *)malloc(sizeof(Node));head->next=head;head->prior=head;

插入和删除就直接画出图形照着写就是

栈

后进先出是LIFO,先进先出是FIFO

顺序栈

存储结构用数组

typedef struct
{
    DataType stack[MaxStackSize];
    int top;//栈顶位置
}SeqStack;

初始化就是将栈顶元素位置即s->top设置为0,注意此处为0,王道是-1

判断是否非空就是判断top是否小于等于0,是就是空,反之不空

入栈就是将数据元素存入数据顺序栈中,栈顶指针加一

s->stack[s->top]=x;
s->top++;
//或者合并写:
s->stack[s->top++]=x;

出栈就是将栈顶指针减一

取栈顶元素就是数组取值操作,这里需要注意,top代表的是数据元素的个数,取值时要记得减一

*x=s->stack[s->top-1];

链式堆栈

链式堆栈的插入和删除操作都在链表表头进行的,且是带有头结点的链表

栈顶元素就是head->next所指向的元素

算术表达式求值

后缀表达式的求法

x1表示当前栈顶元素,x2表示当前扫描到的元素

比较优先级:

x1>x2:x1出栈并加入后缀表达式,将x1变为新的栈顶元素,继续比较

x1<x2:x2进栈并读取下一个元素

x1=x2且x1=="(",x2==")":将x1出栈继续读取下一个元素

x1=x2="#":算法结束

优先级的规则:

不同级别:"(" >乘除>加减> ")"

同一级别:栈顶>扫描到的元素

串

串的下标是从0开始的,比如插入或者删除等操作中从第i个字符开始,i字符数组的下标

字符串比较比的是ascii

BF算法

设主串长为n子串长为m,最好情况下时间复杂度为O(m),最坏情况下时间复杂度为O(mn)

int BFIndex(DString S,int start,Dstring T)//查找成功则返回子串在主串中的位置
{
    int s=start;s,t=0,pos;
    while(s<S->length && t<T->length)
    {
        if(S->str[s]==T->str[t])
        {
            s++;
            t++;
        }else{
            s=s-t+1;
            t=0;
        }
    }
    if(t==T->length)
        pos=s=T->length;
    else
        pos=-1;
    return pos;
}

KMP算法

计算next[j]

void GetNext(DString T,int next[])
{
    int j=1,k=0;
    next[0]=-1;
    next[1]=0;
    while(j<T->length-1)
    {
        if(T->str[j]==T->str[k])
        {
            next[j+1]=k+1;
            j++;
            k++;
        }
        else if(k==0)
        {
            next[j+1]=0;
            j++;
        }
        else
            k=next[k];
    }
}

数组

图

无向图中有n个顶点e条边,则对应邻接表中有n个表头结点和2e个表结点

有向图中有n个顶点e条边,则对应邻接表中有n个表头结点和e个表结点

连通图是指无向图中任意一对顶点都存在路径。

设某连通图中有n个顶点则该连通图中至少n-1条边

强连通图是指有向图中任意一对顶点都存在路径

设某强连通图中有n个顶点则该强连通图中至少n条边

B_树

m阶B_树就是m阶平衡m叉树

特点

1.树中每个结点至多有m个孩子结点,除根节点之外,其他结点至少有 m/2(向上取整) 个孩子结点

2.每个节点中至多有m-1个关键字,非根结点至少m/2(向上取整) -1个关键字,根结点可以有一个关键字

2.若根节点不是叶子结点则根节点至少有两个孩子结点

3.所有叶子结点都在同一层上

比如3阶B_树,每个结点最多3个孩子结点,每个结点中最多个3-1=2关键字,除根节点为至少3/2=1个结点

插入

每个节点中至多有m-1个关键字

情况1:待插结点中关键字满足n<m-1  

     操作:直接插入

情况2:待插结点中有m-1个关键字

     操作:分裂结点:以中间关键字为界,把结点分成两个结点并把中间元素的关键字向上插入到双亲结点上,若双亲结点已满,则继续分裂双亲结点

删除、

每个节点中至多有m-1个关键字,非根结点至少 m/2-1 个关键字

一、删除叶子结点

情况1:待删结点的关键字个数n>=m/2

操作:直接删除

情况2:待删结点关键字个数n=m/2-1,并且左兄弟或右兄弟关键字大于m/2-1

操作:问左兄弟或右兄弟借

以左兄弟为例:将待删结点的左兄弟中最大的关键字移动到双亲中,同时把双亲中大于上移关键字的关键字下移到待删元素的结点中,将待删元素给删除

情况3:待删结点关键字个数n=m/2-1,并且左兄弟或右兄弟关键字等于m/2-1

操作:合并结点

把待删结点与其左(右)兄弟结点以及双亲结点上分割二者的元素合并成一个结点,然后再把待删元素删除

二、删除非叶子结点

操作:找、复制、删

1.找到右指针所指的子树中最小的关键字

2.将最小的关键字的值复制到待删元素上

3.以右指针所指结点为根节点,删除关键字等于最小关键字的数据元素

Perl语言的数据结构 Perl语言通过提供多种数据结构,使得开发者可以高效地处理和存储数据。无论是基本的标量、数组和哈希,还是更复杂的数组的数组、哈希的哈希,理解和掌握这些数据结构,对于编写高效、灵活且易于维护的代码至关重要。通过选择合适的数据结构并应用相关操作,我们可以构建出高效且复杂的程序,从而满足不同的需求。在实际开发中,灵活运用这些数据结构,将极大提高你的编程效率与代码质量。 阅读详情

相关推荐

【数据结构】数据结构概述

在链表中,每个节点只包含一个指向前驱节点和一个指向后继节点的指针,而且数据元素只能通过遍历节点来访问和操作。需要注意的是,在某些特殊的线性数据结构中,可能没有明确定义的前驱或后继方向,例如双向链表中的每个节点既是前驱节点也是后继节点。这些数据结构在计算机科学和编程中经常被使用,对于特定的问题和应用场景,不同的线性数据结构都有各自的优缺点和适用性。总之,内存和数据结构是紧密相关的,选择合适的数据结构和优化内存使用可以提高程序的性能和效率。在一个链表中,每个节点的前驱是它前面的节点,后继是它后面的节点。

Fddadd的博客 1345

c语言实现顺序表的运算实验报告,数据结构实验报告-实验一 顺序表、单链表基本操作的实现...

实验一 顺序表、单链表基本操作的实现l 实验目的1、顺序表(1)掌握线性表的基本运算。(2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作。(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力。l 实验内容1、顺序表1、编写线性表基本操作函数:(1)InitList(LIST *L,int ms)初始化线性表;(2)InsertList(LIST *L,int item...

weixin_29212867的博客 3164

【大话数据结构】——-数据结构

数据结构,顾名思义:就是计算机存储、组织数据的方式。 定义: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 使用数据结构的好处: 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:Data_Structure=(

你只管努力, 3628

数据结构之顺序表的实现

数据结构之顺序表的实现 一、原理 1.定义 顺序表是在计算机中以数组形式保存的。 2.特点 在计算机中占用连续的一段内存 一旦声明,空间大小一般不变 二、初始化相关操作 包括: 结构体的定义 顺序表的创建 顺序表清空 判断顺序表是否为空 1.结构体定义 即定一个满足顺序表定义的结构体,其中包含 数组、存储长度、总长度。 typedef int ElemType; //将int抽象为ElemType,表明顺序表也可以存储其他类型(如将int改为char) struct List { E...

gman344的博客 1811

什么是数据结构,都有哪些数据结构

  在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 “数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数

liwenfengf1988的专栏 7414

基于Xilinx_IBERT的光纤接口眼图测试

基于Xilinx_IBERT的光纤接口眼图测试

Coca_Tian的博客 1万+

C++ list用法详解

        转载 https://blog.youkuaiyun.com/yas12345678/article/details/526015781.关于list容器      list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作...

飘过的春风 5万+

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1086

链表中的LinkList L、LinkList *L

对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即(*L).elem; 对于LinkList *L:L是指向定义的Node结构体指针的指针,所以(*L)是指向Node结构体的指针,可以用->运算符来访问结构体成员,即(*L)->elem,...

ShenHang_的博客 3583

无人机中继传输数据链技术,(无人机+自组网)远距离传输技术实现详解

无人机中继传输数据链技术是指利用无人机作为空中移动中继节点,在需要通信的区域上空悬停或移动,以建立和维护通信链路,从而扩展通信范围、提高通信质量和灵活性。1. 通信链路:是无人机中继通信的重要组成部分,包括源节点到中继节点的链路和中继节点到目标节点的链路。同时,它还支持空中到地面的通信,距离大于100km。总的来说,无人机中继传输数据链技术和(无人机+自组网)远距离传输技术都是现代无人机通信领域的重要技术,它们的应用极大地扩展了无人机的通信范围和灵活性,为各种应用场景提供了强有力的支持。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2079

TI IWR6843AOP雷达+DCA1000EVM数据采集:官方手册里的坑,我帮你踩完了

本文详细解析了TI IWR6843AOP雷达与DCA1000EVM数据采集实战中的12个关键细节,包括硬件连接陷阱、mmWave Studio隐藏设置、数据采集参数优化等,帮助开发者避开官方手册未提及的常见问题,提升数据采集效率和系统稳定性。

weixin_28366475的博客 1102

《算法和数据结构》数据结构篇

蓝桥杯你必须学会的算法

英雄哪里出来 4万+

强化学习:Distributed PPO (DPPO) 学习笔记

DPPO = Distributed + Proximal Policy Optimization Distributed:多个智能体并行训练 Proximal:限制策略更新幅度,确保稳定性 Policy Optimization:基于策略梯度的优化方法 核心思想:多个智能体并行探索环境,共享经验,通过裁剪策略更新确保训练稳定

只是个人学习笔记 1332

【数据结构】什么是数据结构?

此篇文章旨在对数据结构做一个初步认识,了解数据结构相关的概念和术语以及它的三要素。以上为学习数据结构的基础知识,也不是说非得熟知这些知识,只要你对于这些有一定的了解,那么对于后续的数据结构知识学习有一定的帮助。

@情话 3425

基于大模型与知识图谱的对话引导意图澄清系统技术解析

本文提出了一种基于知识图谱与大语言模型的意图澄清系统,旨在解决传统RAG模型在跨文档推理和主动澄清方面的不足。系统通过知识图谱驱动的多跳推理机制和链式思维引导的对话流程,实现了动态信息补全和意图澄清。核心创新包括:1)知识图谱构建与节点选择算法;2)标签探索策略与原子事实提取方法;3)主动澄清引擎的工作流程。实验表明,该系统能有效提升复杂查询的准确率,在医疗、金融等领域实现精准交互。关键代码展示了节点选择、标签匹配和事实提取等核心组件的实现细节。

416

SAP-ABAP:SAP IDOC 全面学习指南

SAP-ABAP:SAP IDOC 全面学习指南

baidu_35680696的博客 1617

数据结构——初识数据结构

唯一可以确定的是,明天会使我们所有人大吃一惊——阿尔文·托夫勒

Marksky的博客 2791

微信小程序推广策略,打开小程序领域流量大门

本文旨在为小程序开发者、运营者和企业主提供一套完整的微信小程序推广策略体系,帮助他们在竞争激烈的小程序生态中获得更多流量和用户。内容涵盖从0到1的冷启动策略,到成熟期的增长技巧。本文将首先介绍小程序的基础推广设置,然后深入探讨各种流量获取渠道,接着分析数据驱动的优化方法,最后展望未来发展趋势。小程序:无需下载安装即可使用的应用,运行在微信生态内:独立访客数:页面浏览量转化率:完成目标行为的用户比例留存率:用户在一定时间后仍活跃的比例自然流量获取:通过优化搜索、完善资料等方式获得基础流量社交裂变。

小程序开发 1031

javascript数据结构

javascript数据结构你都知道哪些?

Sherry Tian的博客 2001

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构:八大数据结构分类

数据结构:八大数据结构分类 数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1、数组 数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,...

JavaAlliance 4734

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构】数据结构整体大纲

1. 数组(Array)作用:存储固定大小的连续数据,支持随机访问。解决的问题:快速按索引访问数据。应用场景实现栈、队列。存储二维或多维矩阵数据(如图像处理)。动态数组(如 C++ 的和 Python 的list2. 链表(Linked List)作用:通过节点链式存储数据,支持动态插入和删除。解决的问题:在不知道数据大小或需要频繁插入/删除时提供灵活的存储方式。种类单向链表、单向循环链表、双向链表、双向循环链表、内核链表。应用场景内存管理(如空闲内存块管理)。

猫猫的小茶馆 2152

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java中常见数据结构

java中常见的数据结构

gengpengfeiazxl的博客 5179

数据结构-数据结构的起源

早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。在现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

weixin_71098527的博客 1791

数据结构有哪些?数据结构的特点?算法与数据结构

数据结构可以从两个方面分析:逻辑结构与物理结构(存储结构)。 其中逻辑结构指的是数据的组织方式,物理结构指的是数据在内存上的存储方式。 逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。 物理结构又叫存储结构,分为四种种,顺序存储结构、链式存储结构、索引结构、散列结构。 一、什么是数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 数据结构与算法的关系: 数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一.

qq_41687938的博客 5626

数据结构:八种数据结构大全

链表(Linked List):链表是由一系列节点Node(也可称元素)组成,数据元素的逻辑顺序是通过链表的指针地址实现,通常情况下,每个节点包含两个部分,一个用于存储元素的内存地址,名叫数据域,另一个则指向下一个相邻节点地址的指针,名叫指针域;数组(Array):数组是有序元素的序列,在内存中的分配是连续的,数组会为存储的元素都分配一个下标(索引),此下标是一个自增连续的,访问数组中的元素通过下标进行访问;很显然,我们的地图是一种无向图,以长沙到上海为例,经过的城市有长沙、南昌、杭州、上海等地;

m0_48805880的博客 4549
上一篇: C语言的零碎知识点
下一篇: 数据结构乱七八糟算法代码
楼星辰
博客等级 码龄7年 48粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值