【从零开始的嵌入式生活】数据结构2——线性表及顺序表(1)

简介: 【从零开始的嵌入式生活】数据结构2——线性表及顺序表(1)

前言

今天开了个新正式进入数据结构的学习,这两天颈椎病需要治一治所以有些拖更,治好我就满血复活0.0大家注意身体呀!

另外今天竟然接到了第一个实习的面试邀请,惊喜,这两天也会加油更新的同时看看面经,相关的过程记录我也想更新,如果大家想看的话(疯狂暗示)。

主要内容为:



三连即可提高学习效率0.0


🧑🏻作者简介:一个学嵌入式的年轻人

✨联系方式:2201891280(QQ)

📔源码地址:https://gitee.com/xingleigao/study_qianrushi

⏳全文大约阅读时间: 60min


文章目录

前言

线性表

线性表的顺序存储

顺序存储的定义方式

代码的写作规范

线性表的基本运算

建立一个空表:list_create(L)

置空表:list_clear(L)

判空:list_empty(L) 空返回``1``,非空为``0``

求表长:length(L)

插入:Insert(L,x,i)将元素x插入到表L中第i个元素``a~i~``之前,且表长``+1``

释放空间:list_free(sqlink L);

显示所有元素:list_show(sqlink L);

显示所有元素:list_delete(sqlink L, int pos);

合并链表:list_merge(sqlink L1, sqlink L2)

删除线性表中重复的元素:list_purge(sqlink L)

线性表的顺序存储优缺点

写在最后

线性表

线性表是包含若干数据元素的一个线性序列

记为:L=(a0,…ai-1,ai,ai+1,…an-1)


L为表名,ai(0 ⩽ \leqslant⩽i⩽ \leqslant⩽n-1)为数据元素;

n为表长,n>0是,线性表L为非空表,否则为空表。

线性表L可用二元组形式描述:L=(D,R)

即线性表L包含数据元素集合D和关系集合R


举个例子:

设L={1,2,3,4,5,6}关系如图:

使用二元组描述为L=(D,R)其中D={1,2,3,4,5,6}(n=6),R={<1,2>,<2,3>,<3,4>,<4,5>,<5,6>}


线性表的特征


对非空表,a0是表头,无前驱;

an-1是表尾,无后继;

其它的每个元素ai有且仅有一个直接前驱ai-1和一个直接后继ai+1。

其实就是上图的表示方式


线性表的顺序存储

将线性表L=(a0,…ai-1,ai,ai+1,…an-1)中各元素依次存储在计算机一片连续的存储空间。

则假设Loc(ai)为ai的地址,Loc(a0)=b,则有:Loc(a~i~) = b + i * d


顺序存储的特点:


优点

逻辑上相邻的元素ai,ai+1,其存储位置也相邻

对数据元素ai的存取为随机存取或按地址存取

存储密度高

存储密度D = (数据结构中元素所占存储空间)/(整个数据结构所占空间)

缺点

对表的插入和删除等运算时间复杂度高

看问题应用场景,其实任何方式都有优缺点都有其应用场景,只有相对较好的解决方案,没有正确的解决方案!


顺序存储的定义方式

在C语言中,可借助于一维数组类型来描述。

线性表的顺序存储结构


#define N 100
typedef int data_t; //可以改变数据类型定义其他的类型数据
typedef struct{
  data_t data[n]; //表的存储空间
  int last;
}sqlist,*sqlink;

代码的写作规范

一般的写作包含三部分内容sqlist.h、sqlist.c、test.c


sqlist.h包含定义、运算

sqlist.c包含函数的接口实现

代码分层的原因:

其中外包公司用的时候为了保护公司核心资产所以只会给.h和编译好的.s.o。所以.h文件一般暴露接口定义和基本的数据结构定义。

所以可以使用两种方式编译:


#一个个编译
gcc -c test.c sqlist.c  #编译生成test.o和sqlist.o
gcc *.o -o a.out  #编译生成a.out
#一起编译
gcc *.c -o a.out


所以给外包公司汇编好的.o即可,头文件也需要给到就完事了。


线性表的基本运算

建立一个空表:list_create(L)


sqlink list_create(){
       //malloc
       sqlink L;
       L = (sqlink)malloc(sizeof(sqlist));
       if ( L == NULL){
               printf("list malloc failed\n");
               return L;
       }
       //initialize
       memset(L, 0, sizeof(sqlist));
       L->last = -1;
       //return
       return L;
}

置空表:list_clear(L)

/*
* @ret 0-success -1-failed
* */
int list_clear(sqlink L){
       if(L == NULL)
               return -1;
       memset(L, 0, sizeof(sqlist));
       L->last = -1;
       return 0;
}


相关文章
|
1月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
42 7
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
38 5
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
41 5
|
2月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
3月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
3月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
110 3
|
3月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
3月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
4月前
|
存储
数据结构(顺序表)
数据结构(顺序表)
36 0
|
4月前
|
存储 算法
【数据结构】新篇章 -- 顺序表
【数据结构】新篇章 -- 顺序表
31 0

热门文章

最新文章