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

嵌入式系统学习Day19(数据结构)

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

数据之间关系:

逻辑关系:集合,线性(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 <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
#include <string.h>
int main(int argc, char** argv)
{FILE* fp = fopen("/home/linux/dict.txt","r");if(NULL == fp){perror("fopen");return 1;}SeqList* sl = CreateSeqList(20000);if(NULL == sl){fprintf(stderr,"CreateSeqList error\n");return 1;}while(1){DATATYPE data;char * word=NULL;char* mean=NULL;char linebuf[1024]={0};if(NULL==fgets(linebuf,sizeof(linebuf),fp)){break;}word = strtok(linebuf," ");mean = strtok(NULL,"\r");strcpy(data.word,word);strcpy(data.mean,mean);// strcpy(data->word,word);// strcpy(data->mean,mean);InsertTailSeqList(sl, &data);}while(1){char want_word[50]={0};printf("input word:");fgets(want_word,sizeof(want_word),stdin);// book\nwant_word[strlen(want_word)-1]='\0';if(0==strcmp(want_word,"#quit")){break;}int ret = FindSeqList(sl, want_word);if(-1 == ret){printf("cant find %s\n",want_word);}else  {ShowSeqListOne(sl, ret);}}return 0;fclose(fp);DestroySeqList(sl);
}

#include "hwdict.h"
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
SeqList *CreateSeqList(int len)
{SeqList *sl = malloc(sizeof(SeqList));if (NULL == sl){perror("CreateSeqList malloc error\n");return NULL;}sl->head = malloc(sizeof(DATAWORD) * len);if (NULL == sl->head){perror("CreateSeqList malloc2 error\n");return NULL;}sl->tlen = len;sl->clen = 0;return sl;
}void ReadInfo(SeqList *list, char *argv)
{int fd = open(argv, O_RDONLY);if(-1 ==fd){perror("open");exit(1);}char buf[50];char info_buf[500];int i;int flag =1;int ret =0;//while (list->clen < list->tlen)//每一行读取while(flag){i = 0;while (1){ret = read(fd, &buf[i], 1);if(ret<=0){flag =0;break;}if (buf[i] == ' '){buf[i] = '\0';strcpy(list->head[list->clen].name, buf);break;}i++;}i = 0;while (1){ret= read(fd, &info_buf[i], 1);if(ret<=0){flag =0;break;}if (info_buf[i] == '\n'){info_buf[i] = '\0';strcpy(list->head[list->clen].info, info_buf);break;}i++;}list->clen++;if(list->clen == list->tlen){flag=0;break;}}close(fd);
}int GetSizeSeqList(SeqList *list)
{return list->clen;
}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;
}
#ifndef _SEQLIST_H_
#define _SEQLIST_H_typedef struct word
{char name[50];char info[500];
} DATAWORD;typedef struct list
{DATAWORD *head;int tlen;int clen;
} SeqList;//创建一个顺序表
SeqList *CreateSeqList(int len);void ReadInfo(SeqList *list, char *argv);int GetSizeSeqList(SeqList *list);int FindSeqList(SeqList *list, char *name);
#endif

http://www.dtcms.com/a/339662.html

相关文章:

  • 用poll改写select
  • 网站频繁遭遇SQL注入、XSS攻击该怎么办?
  • 分布式搜索(Elasticsearch)深入用法
  • git 创用操作
  • java快速接入mcp以及结合mysql动态管理
  • 【SQL优化案例】统计信息缺失
  • 前端使用koa实现调取deepseekapi实现ai聊天
  • RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)
  • Apache ECharts 6.0.0 版本-探究自定义动态注册机制(二)
  • HTML5视频加密播放的主要优势
  • 本地存储(Local Storage)与Cookie的深度对比
  • RWA在DeFi中的应用
  • 行业分析---领跑汽车2025第二季度财报
  • EasyExcel 合并单元格最佳实践:基于注解的自动合并与样式控制
  • 大模型如何通过人工指标来评估效果?有哪些常用的人工指标?
  • FGF21对牛磺胆酸钠诱导的急性胰腺损伤的应答
  • DAY48 随机函数与广播机制
  • 补偿电流控制的APF并联型有源电力滤波器simulink
  • 2025年09月计算机二级MySQL选择题每日一练——第一期
  • 《深入源码理解webpack构建流程》
  • springboot 项目正常启动后自动结束
  • 当硅基生命遇见碳基萌宠:Deepoc具身智能如何重新定义“宠物监护者”
  • 【QT入门到晋级】进程间通信(IPC)-socket(包含性能优化案例)
  • UX 设计入门第二课:如何洞察人心?用户研究方法论导览
  • elementplus组件文本框设置前缀
  • 07复杂度分析实战习题集
  • PG靶机 - Pebbles
  • 无人机/航测/三维建模领域常见的“航线规划或建模方式
  • 基于单片机智能拐杖/导盲杖/老人防摔倒设计
  • python-林粒粒的视频笔记1