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

自学嵌入式 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
  }

相关文章:

  • Seata源码—3.全局事务注解扫描器的初始化一
  • Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理
  • Web》》url 参数 # 、 ? 、@
  • element ui 级联列表Cascader懒加载数据回显的优雅解决方案
  • LocalDateTime类型的时间在前端页面不显示或者修改数据时因为LocalDateTime导致无法修改,解决方案
  • 会计要素+借贷分录+会计科目+账户,几个银行会计的重要概念
  • 【J2】乘法逆元
  • 将b[索引]中元素按照a中元素的值进行排序
  • C++核心编程--1 内存分区模型
  • python打卡day26
  • 如何在线免费压缩PDF文档?
  • 【MySQL】多表连接查询
  • 各个历史版本mysql/tomcat/Redis/Jdk/Apache/gitlab下载地址
  • 2024年9月电子学会等级考试五级第三题——整数分解
  • 【蓝桥杯省赛真题49】python偶数 第十五届蓝桥杯青少组Python编程省赛真题解析
  • zynq嵌入式linux启动默认设置
  • 钉钉数据与金蝶云星空的无缝集成解决方案
  • 嵌入式开发学习日志(数据结构--双链表)Day21
  • C++ QT图片查看器
  • 掘金中亚货代蓝海,易境通货代系统解锁数字化制胜密码!
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 张国清将赴俄罗斯举行中俄“长江—伏尔加河”地方合作理事会第五次会议和“东北—远东”政府间合作委员会双方主席会晤
  • “大型翻车现场”科技满满,黄骅打造现代化港口和沿海新城典范
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 足球少年郎7月试锋芒,明日之星冠军杯构建顶级青少年赛事
  • 杭州钱塘区3宗涉宅用地均以底价成交,共计成交金额25.73亿元