当前位置: 首页 > news >正文

学习嵌入式的第二十天——数据结构

数据结构的概念:

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

数据之间关系:


逻辑关系:集合,线性(1对1,中间位置的值有且仅有一个前驱,一个后继),树(1对多),图(多对多)

物理关系:

顺序结构(类似于数组):存储空间连续,有序

链表:存储空间不连续


算法:

对特定问题求解步骤的描述。(类似函数)

算法的特性:输入输出特性(输入可省,输出必须有,数值的改变就可以称为输出),可读性(便于阅读), 可行性(可以用代码执行出来),有穷性(是有限的),确定性(同一个输入会是同一个输出)

衡量算法好坏的方法。

时间复杂度,时间的度量(事前分析法) ,大O 记法。

O(1)<O(lgn)<O(N)<O(nLgN)<O(N^2)<O(N^3)

顺序表

存储空间是连续

 特征:  支持随机访问   head+5 head[0] O(1)
插入,删除, 整体移动。   O(N)
不具有动态存储功能。

关于顺序表的操作

#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>SeqList *CreateSeqList(int len)
{SeqList *sl = malloc(sizeof(SeqList));if (NULL == sl){perror("CreateSeqlist malloc error\n");return NULL;}sl->head = malloc(sizeof(DATATYPE) * len);if (NULL == sl->head){perror("CreateSeqlist malloc2 error\n");return NULL;}sl->clen = 0;sl->tlen = len;return sl;
}int InsertTailSeqList(SeqList *list, DATATYPE *data)
{if (IsFullSeqList(list)){printf("seqlist is full\n");return -1;}memcpy(&list->head[list->clen], data, sizeof(DATATYPE));list->clen++;return 0;
}int IsFullSeqList(SeqList *list)
{return list->clen == list->tlen;
}int ShowSeqList(SeqList *list)
{int len = GetSizeSeqList(list);int i = 0;for (i = 0; i < len; i++){printf("name :%s sex :%c age : %d score :%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 InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)
{if (IsFullSeqList(list)){printf("seqlist full\n");return -1;}int len = GetSizeSeqList(list);if (pos < 0 || pos > len){printf("pos is incorrect\n");return -1;}for (int i = list->clen; i > pos; i--){// list->head[i]=list->head[i-1];memcpy(&list->head[i], &list->head[i - 1], sizeof(DATATYPE));}memcpy(&list->head[pos], data, sizeof(DATATYPE));list->clen++;return 0;
}int FindSeqList(SeqList *list, char *name)
{int len = GetSizeSeqList(list);for (int i = 0; i < len; i++){if (0 == strcmp(list->head[i].name, name)){return i;}}return -1;
}DATATYPE *GetIetmSeqlist(SeqList *list, int pos)
{int len = GetSizeSeqList(list);if (pos < 0 || pos > len){printf("pos is incorrect\n");return NULL;}return &list->head[pos];
}/*** @brief 删除** @param list  要进行删除的表* @param name  要删除的名字* @return int  成功0 失败-1*/
int DeleteSeqList(SeqList *list, char *name)
{if (0 == list->clen){printf("delete fail\n");return -1;}int ret = FindSeqList(list, name);if (-1 == ret){printf("delete fail\n");return -1;}int i = 0;for (i = ret; i < list->clen; i++){// list->head[i]=list->head[i=1];memcpy(&list->head[i], &list->head[i + 1], sizeof(DATATYPE));}list->clen--;return 0;
}int ClearSeqList(SeqList *list)
{list->clen = 0;return 0;
}//修改
int ModifySeqList(SeqList *list, char *olddata, DATATYPE *newdata)
{int ret = FindSeqList(list, olddata);if (-1 == ret){printf("modify fail\n");return -1;}memcpy(&list->head[ret], newdata, sizeof(DATATYPE));return 0;
}int DestroySeqList(SeqList *list)
{free(list->head);free(list);return 0;
}

Makefile

用于工程管理,可以设定规则将文件一起编译

SRC=main.o
SRC+=seqlist.o
DST=all
CC=gcc
LIB=-lm%o:%.c$(CC) -c $^ -o $@$(DST) :$(SRC)$(CC) $^ -o $@ $(LIB)clean:rm $(DST) *.o	

http://www.lryc.cn/news/624966.html

相关文章:

  • 如何解决机器翻译的“幻觉“问题(Hallucination)?
  • 特赞内容运营解决方案,AI重构品牌内容价值链
  • (Arxiv-2025)OPENS2V-NEXUS:一个面向主体到视频生成的详细基准与百万规模数据集
  • 知识蒸馏 - 各类概率分布
  • 概率论基础教程第4章 随机变量(三)
  • 基于 Ansible 与 Jinja2 模板的 LNMP 环境及 WordPress 自动化部署实践
  • 数据库:表和索引结构
  • 【68页PPT】智慧方案信息物理系统与数字孪生某著名企业(附下载方式)
  • 从零开始搭建React+TypeScript+webpack开发环境——多环境配置管理方案
  • 图论:Floyd算法
  • WPF---数据模版
  • 算法题打卡力扣第26. 删除有序数组中的重复项(easy))
  • 计算机网络-IPv6
  • 使用 uv管理 Python 虚拟环境:比conda更快、更轻量的现代方案
  • 保姆级教学:使用 Jenkins 部署前端项目(2025 年最新版)
  • 知识蒸馏 Jensen-Shannon散度
  • Vue3 全新特性 defineModel 深度解析
  • [Oracle数据库] Oracle 进阶应用
  • BPO(Business Process Optimization,业务流程优化)
  • 信创产业:从技术突围到生态重构的强国之路
  • redis持久化机制:RDB和AOF
  • 手机视频怎么提取音频?3步转成MP3,超简单!
  • 十年回望:Vue 与 React 的设计哲学、演进轨迹与生态博弈
  • PLC 控制系统中 PCB 板的选型与设计要点
  • 申请免费的SSL证书,到期一键续签
  • 深入浅出决策树
  • python学习DAY45打卡
  • JMeter与大模型融合应用之构建AI智能体:评审性能测试脚本
  • Nodejs学习
  • 基于ssm jsp中学校园网站源码和答辩PPT论文