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

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

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

/*
* list_empty : Is list empty?
* para L : list
* @ret 1--empty 0--not empty  -1--failed
* */
int list_empty(sqlink L){
       if (L == NULL)
               return -1;
       if (L->last == -1)
               return 1;
       else
               return 0;
}


求表长:length(L)

/*
* list_length : return the length of list
* para L : list
* @ret -1--failed
* */
int list_length(sqlink L){
       if (L == NULL)
               return -1;
       return (L->last + 1);
}


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


其中的三个问题:


last < (N - 1)

0 ⩽ p o s ⩽ l a s t + 1 0 \leqslant pos \leqslant last+10⩽pos⩽last+1

如果在last+1插入不需要移动,否则从后往前依次移动。

int list_insert(sqlink L, data_t value, int pos){
       int i;
       if (L == NULL)
               printf("list is invalid\n");
       //full
       if (L->last == N-1){
               printf("list is full\n");
               return -1;
       }
       //check para pos [0, last+1]
       if ( pos < 0 || pos > L->last+1){
               printf("Pos is invalid\n");
               return -1;
       }
       //move
       for (i = L->last; i >= pos; i--){
               L->data[i+1] = L->data[i];
       }
       //update last
       L->data[pos] = value;
       L->last ++;
       return 0;
}

释放空间:list_free(sqlink L);

int list_free(sqlink L){
       if (L == NULL)
               return -1;
       free(L);
       L = NULL;
       return 0;
}


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

int list_show(sqlink L){
       int i;
       if(L == NULL)
               return -1;
       if(L->last == -1)
               printf("list is empty\n");
       for (i = 0; i <= L->last; ++i){
               printf("%d ", L->data[i]);
       }
       puts("");
       return 0;
}


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


int list_delete(sqlink L, int pos){
       if (L == NULL){
               printf("list is invalid\n");
               return -1;
       }
       if (L->last == -1){
               printf("list is empty\n");
               return -1;
       }
       //pos [0,last]
       if (pos < 0 || pos > L->last){
               printf("delete pos is invalid\n");
               return -1;
       }
       //move
       for (int i = pos + 1; i <= L->last; i++){
               L->data[i-1] = L->data[i];
      }
       //update
       L->last --;
       return 0;
}


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


int list_merge(sqlink L1, sqlink L2){
       int i = 0;
       while (i <= L2->last){
               int ret = list_locate(L1, L2->data[i]);
               if (ret == -1){
                       if(list_insert(L1, L2->data[i], L1->last + 1) == -1)
                               return -1;
               }
               ++i;
       }
       return 0;
}

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

int list_purge(sqlink L){
       int i = 1, j;
       if (L->last == 0)
               return 0;
       while ( i <= L->last){
               j = i - 1;
               while ( j >= 0){
                       if (L->data[i] == L->data[j]){
                               list_delete(L, i);
                               break;
                       }
                       else{
                               j--;
                       }
               }
               if (j < 0)
                       i++;
       }
       return 0;
}


线性表的顺序存储优缺点

线性表的顺序存储结构有存储密度高和随机存取的优点

缺点:


要求系统提供一片较大的连续存储空间

插入、删除等运算耗时,且存在元素在存储器中成片移动的现象

写在最后

数据结构开篇之作,今天很多内容需要去gitee仓库里找我练习的代码跟着写来理解,大家加油,接下来的几天时间会继续了解各种数据结构,因为这部分之前我没写完所以更新有点慢,大家和我一起变强呀!最后三连即可提高学习效率!!!


另外我在更新的就是算法笔记的一些例题笔记,这个系列是用于提高我的算法能力,如果有兴趣对算法领域感兴趣找不到合适的入门文章也可以追更,如果我更新的太慢了请大家点赞收藏,一键三连才能更有更新的动力呀0.0


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

热门文章

最新文章

下一篇
开通oss服务