自学嵌入式 day 18 - 数据结构 1

数据结构

相互之间存在一种或多种特定关系的数据元素的集合

1.特定关系:

(1)逻辑结构:

①集合:所有在同一个集合中,关系平等。

②线性关系:数据和数据之间是一对一的关系。(数组是线性表的形式之一)

③树状关系:一对多

④图状解构:多对多

(2)物理结构(在内存当中的存储关系,即将上述关系存入内存):

①顺序存储:数据存放在连续的存储单位中。逻辑关系和物理关系一致

②链式结构(链表):数据存放的单位是随机或任意的

Struct Per 数据元素

{

        char name;

        int age;

        char phone;

}

程序 =  数据 + 算法

2.算法:

①定义:是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或多个操作。

②特征(函数):

1),输入,输出特性,输入时可选的,输出时必须的。
2),有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。
3),确定性,同一个输入,会得到唯一的输出。
4),可行性,每一个步骤都是可以实现的。

③设计:

1),正确性:语法正确
                    合法的输入能得到合理的结果。
                    对非法的输入,给出满足要求的规格说明
                    对精心选择,甚至刁难的测试都能正常运行,结果正确
2),可读性,便于交流,阅读,理解
3),健壮性,输入非法数据,能进行相应的处理,而不是产生异常
4),高效,存储低,效率高 

④算法时间复杂度:执行算法所时间的度量,o(n)-粗略的估计

1)推算:   用常数1 取代运行时间中的所有加法常数
                在修改后的运行函数中,只保留最高阶项。
                如果最高阶存在且不是1,则取除这个项相乘的常数。

3.线代表

①定义:零个或多个数据元素的有限序列
②特征:元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。
               当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

③线代表的常规操作:

线性表的常规操作  ADT
typedef struct person {
char name[32];
char sex;
int age;
int score;
}DATATYPE;
typedef int Datatype;
typedef struct list {
DATATYPE *head;
int tlen;
int clen;
}SeqList;

SeqList *CreateSeqList(int len);//创建顺序链表
int DestroySeqList(SeqList *list);//销毁链表
int ShowSeqList(SeqList *list);//遍历输出链表
int InsertTailSeqList(SeqList *list, DATATYPE data);//尾部元素赋值
int IsFullSeqList(SeqList *list);//判断链表是否已满
int IsEmptySeqList(SeqList *list);//判断链表是否为空
int InsertPosSeqList(SeqList *list, DATATYPE data, int pos);//指定位置插入元素
int FindSeqList(SeqList *list, char *name);//查找元素
int ModifySeqList(SeqList *list, char *old, DATATYPE new);//修改成员值
int DeleteSeqList(SeqList *list, char *name);//删除成员
int ClearSeqList(SeqList *list);//清空元素

④上述操作代码表示:


#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
SeqList *CreateSeqList (int len)//创建顺序链表
{
  SeqList *sl = malloc (sizeof (SeqList));
  if (NULL == sl) {
    fprintf (stderr, "CreateSeqList malloc error\n");
    return NULL;
  }

  sl->head = malloc (sizeof (DATATYPE) * len);
  if (NULL == sl->head) {
    fprintf (stderr, "CreateSeqList malloc2 error\n");
    return NULL;
  }
  sl->tlen = len;
  sl->clen = 0;

  return sl;
}

int IsFullSeqList (SeqList *list)//判断链表是否已满
{
  if (NULL == list) {
    fprintf (stderr, "IsFullSeqList paramter error\n");
    return 1;
  }
  return list->clen == list->tlen;
}

int InsertTailSeqList (SeqList *list, DATATYPE *data)//尾部元素赋值
{
  if (IsFullSeqList (list)) {
    fprintf (stderr, "seqlist full\n");
    return 1;
  }

  memcpy (&list->head[list->clen], data, sizeof (DATATYPE));
  list->clen++;
  return 0;
}

int ShowSeqList (SeqList *list)//遍历输出链表
{
  int len = GetSizeSeqList (list);
  int i = 0;
  for (i = 0; i < len; ++i)
  {
    printf ("%s %c %d %d\n", list->head[i].name, list->head[i].sex,
            list->head[i].age, list->head[i].score);
  }
  return 0;
}

int GetSizeSeqList (SeqList *list) 

    return list->clen; 
    
}

int FindSeqlist(SeqList *list,char *name)//查找元素
{
  int i = 0;
  int len = GetSizeSeqList(list);
  for(i = 0;i < len;++i)
  {
    if(0 == strcmp(list -> head[i].name,name))
    {
      return i;
    }

  }
  return -1;
}
int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)//指定位插入元素
{
  if(IsFullSeqList(list))
  {
    return 1;
  }
  int len = GetSizeSeqList(list);
  if(pos < 0 || len < pos)
  {
    return 1;
  }
  int i ;
  for(i = list -> clen;i > pos;--i)
  {
    memcpy(&list -> head[i],&list -> head[i - 1],sizeof(DATATYPE));
  }
  memcpy(&list -> head[pos],data,sizeof(DATATYPE));
  list -> clen++;
  return 0;
}

int IsEmpList(SeqList *list)//判断链表是否为空
{
    return 0 == list -> clen;
}

int DeleteSeqList(SeqList *list,char *name)//删除链表
{
    if(IsEmpList(list))
    {
        return 1;
    }
    int ret = FindSeqlist(list,name);
    if(-1 == ret)
    {
        return 1;
    }
    int len = GetSizeSeqList(list);
    int i ;
    for(i = ret;i < len - 1;++i)
    {
        memcpy(&list -> head[i],&list -> head[i + 1],sizeof(DATATYPE));
    }
    list -> clen--;
    return 0
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》

随着风电、光伏等分布式能源大规模接入电网&#xff0c;传统调度系统面临数据规模激增、响应延迟显著、多源异构数据融合困难等核心问题。本文聚焦Java生态下的大数据技术体系&#xff0c;深入探讨其在智能电网实时监测、负荷预测、资源优化配置等场景中的落地实践。通过分析Sp…

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-MCP大模型上下文解析

解密企业级大模型智能体Agentic AI 关键技术&#xff1a;MCP、A2A、Reasoning LLMs-MCP大模型上下文解析 我们首先来看一下 整个MCP的一个基本的一个流程&#xff0c;他解决的一个问题。我们回到这里&#xff0c;他解决的一个问题是什么呢&#xff1f;他解决这个问题就是你的大…

25.5.15

没有比水题更令人开心的事情了 典型的并查集题目&#xff0c;并查集分为并和查&#xff0c;并就是把有关系的父亲根结点设为同一个&#xff0c;查就是在成功构造后对其进行查询 查通过递归实现 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特点&#xff0…

低损耗高效能100G O Band DWDM 10km光模块 | 支持密集波分复用

目录 前言 一、产品概述 100G QSFP28 O Band DWDM 10km光模块核心特点包括&#xff1a; 二、为何选择O Band DWDM方案&#xff1f; 1.低色散损耗&#xff0c;传输更稳定 2.兼容性强 三、典型应用场景 1.数据中心互联&#xff08;DCI&#xff09; 2.企业园区/智慧城市组网 3.电信…

CentOS 7 内核升级指南:解决兼容性问题并提升性能

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标” 回复“加群”获取入群讨论资格&#xff01; CentOS 7 默认搭载的 3.10.x 版本内核虽然稳定&#xff0c;但随着硬件和软件技术的快速发展&#xff0c;可能面临以下问题&#xff1a; 硬件兼容性不足&#xff1a;新…

计算机视觉----基础概念、卷积

一、概述 1.计算机视觉的定义 计算机视觉(Computer Vision)是一个跨学科的研究领域,主要涉及如何使计算机能够通过处理和理解数字图像或视频来自动进行有意义的分析和决策。其目标是使计算机能够从视觉数据中获取高层次的理解,类似于人类的视觉处理能力。 具体来说,计算机…

2025认证杯数学建模第二阶段C题:化工厂生产流程的预测和控制,思路+模型+代码

2025认证杯数学建模第二阶段思路模型代码&#xff0c;详细内容见文末名片 一、探秘化工世界&#xff1a;问题背景大揭秘 在 2025 年 “认证杯”数学中国数学建模网络挑战赛第二阶段 C 题中&#xff0c;我们一头扎进了神秘又复杂的化工厂生产流程预测与控制领域。想象一下&…

关于AI人工智能的知识图谱简介

人工智能是计算机科学的一个重要领域&#xff0c;旨在理解和构建智能行为。人工智能可以被划分为多个子领域或分支&#xff0c;包括机器学习、深度学习、自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;、计算机视觉&#xff08;Computer Vis…

巧妙利用redis防爆破

爆破&#xff0c;也就是通过海量的尝试&#xff0c;最终确定密码&#xff0c;人们设置密码具有习惯性&#xff0c;好记、简单、有象征等&#xff0c;也就有密码字典一说&#xff0c;但是该字典也是巨量的&#xff0c;但是相对于各种字母符号等组合就显得轻量非常多 在Java Spr…

Uniapp开发鸿蒙购物项目教程之样式选择器

大家好&#xff0c;今天依然为大家带来鸿蒙跨平台开发教程的分享&#xff0c;我们本系列的教程最终要做一个购物应用&#xff0c;通过这个项目为大家分享uniapp开发鸿蒙应用从配置开发环境到应用打包上架的完成过程。 昨天的文章实现了应用首页的轮播图&#xff0c;其中涉及到…

2、ubantu系统配置OpenSSH | 使用vscode或pycharm远程连接

1、OpenSSH介绍 OpenSSH&#xff08;Open Secure Shell&#xff09;是一套基于SSH协议的开源工具&#xff0c;用于在计算机网络中提供安全的加密通信。它被广泛用于远程系统管理、文件传输和网络服务的安全隧道搭建&#xff0c;是保护网络通信免受窃听和攻击的重要工具。 1.1…

Leetcode刷题 | Day63_图论08_拓扑排序

一、学习任务 拓扑排序代码随想录 二、具体题目 1.拓扑排序117. 软件构建 【题目描述】 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文件编号从 0 到 N - 1&#xff0c;在这些文件中&#xff0c;某些文件依赖于其他文件的内容&#xff0c;这意味着如果文件 A 依…

uniapp中vue3和pinia安装依赖npm install失败

目录 一、问题描述 二、问题原因 三、问题解析及解决方案 一、问题描述 用uni-app开发小程序的时候&#xff0c;使用了vue3pinia,安装依赖的时候发现vue和pinia的版本问题&#xff0c;安装失败&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve np…

2025认证杯第二阶段数学建模B题:谣言在社交网络上的传播思路+模型+代码

2025认证杯数学建模第二阶段思路模型代码&#xff0c;详细内容见文末名片 一、引言 在当今数字化时代&#xff0c;社交网络已然成为人们生活中不可或缺的一部分。信息在社交网络上的传播速度犹如闪电&#xff0c;瞬间就能触及大量用户。然而&#xff0c;这也为谣言的滋生和扩…

【C#】Thread.Join()、异步等待和直接join

JogThread.Join() 是 .NET 中 System.Threading.Thread 类的一个方法&#xff0c;用来让当前调用线程暂停执行&#xff0c;直到目标线程&#xff08;这里是 JogThread&#xff09;终止为止。以下是它的核心语义和你在 UI 代码里需要注意的几个相关知识点。 1. Thread.Join() 的…

牛客网NC22012:判断闰年问题详解

牛客网NC22012&#xff1a;判断闰年问题详解 &#x1f4dd; 题目描述 题号&#xff1a;NC22012&#xff08;牛客网&#xff09; 时间限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C/Rust/Pascal 32 M&#xff0c;其他语言64 M 判断一个…

鸿蒙开发——1.ArkTS声明式开发(UI范式基本语法)

鸿蒙开发——1、ArkTS声明式开发:UI范式基本语法 [TOC](鸿蒙开发——1、ArkTS声明式开发:UI范式基本语法)一、ArkTS的基本组成&#xff08;1&#xff09;核心概念&#xff08;像贴标签一样控制组件&#xff09;&#xff08;2&#xff09;基础工具包&#xff08;现成的积木块&am…

【SPIN】PROMELA语言编程入门基础语法(SPIN学习系列--1)

PROMELA&#xff08;Protocol Meta Language&#xff09;是一种用于描述和验证并发系统的形式化建模语言&#xff0c;主要与SPIN&#xff08;Simple Promela Interpreter&#xff09;模型检查器配合使用。本教程将基于JSPIN&#xff08;SPIN的Java图形化版本&#xff09;&#…

Automatic Recovery of the Atmospheric Light in Hazy Images论文阅读

Automatic Recovery of the Atmospheric Light in Hazy Images 1. 论文的研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法、模型与公式2.1 方法框架2.1.1 方向估计(Orientation Estimation)2.1.2 幅值估计(Magnitude Estimation)2.2 与传统方法的对…

基于微信小程序的在线聊天功能实现:WebSocket通信实战

基于微信小程序的在线聊天功能实现&#xff1a;WebSocket通信实战 摘要 本文将详细介绍如何使用微信小程序结合WebSocket协议开发一个实时在线聊天功能。通过完整的代码示例和分步解析&#xff0c;涵盖界面布局、WebSocket连接管理、消息交互逻辑及服务端实现&#xff0c;适合…