链表之顺序存储
时间:2022-04-22
本文章向大家介绍链表之顺序存储,主要内容包括实例代码、运行结果、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
顺序存储优点:
1 不用额外增加新的节点空间
2 可以快速读取任意位置的元素
顺序存储缺点:
1 插入和删除需要移动大量元素
2 长度变化较大时,难以估计长度
3 存储空间碎片化
读取时,时间复杂度为O(1);
插入或删除时,时间复杂度为O(n);
实例代码
1 /*Edit by Xhalo*/
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 #define MAXSIZE 20
6
7 typedef struct seqList{
8 int data[MAXSIZE];
9 int length;
10 }SL;
11
12
13 int initElem(SL *L,int len);
14 void showElem(SL *L);
15 int getElem(SL *L,int n);
16 int insertElem(SL *L,int n,int num);
17 int deleteElem(SL *L,int n);
18
19 int main()
20 {
21 SL * L = (SL *)malloc(sizeof(SL));
22 /*初始化链表*/
23 if(initElem(L,10))
24 return -1;
25 showElem(L);
26 /*查找指定的元素*/
27 printf("the first number is %dn",getElem(L,1));
28 /*插入指定位置的元素*/
29 if(insertElem(L,4,100))
30 return -1;
31 showElem(L);
32 /*删除指定位置的元素*/
33 if(deleteElem(L,5))
34 return -1;
35 showElem(L);
36 return 0;
37 }
38 int initElem(SL *L,int len){
39 int i;
40 for(i=0;i<len;i++){
41 L->data[i]=i*2+1;
42 }
43 L->length = len;
44 return 0;
45 }
46
47 void showElem(SL *L){
48 int len=L->length;
49 int i;
50 for(i=0;i<len;i++){
51 printf("%d ",L->data[i]);
52 }
53 printf("n");
54 }
55
56 int getElem(SL *L,int n){
57 if(L->length == 0 || n<0 || n>L->length)
58 printf("get List number error!");
59 return L->data[n-1];
60 }
61
62 int insertElem(SL *L,int n,int num){
63 int i;
64 if(n>L->length)
65 return 1;
66 if(n<1 || n>L->length+1)
67 return 1;
68 if(n <= L->length){
69 for(i=L->length-1;i>=n-1;i--)
70 L->data[i+1] = L->data[i];
71 }
72 L->data[n-1]=num;
73 L->length++;
74 return 0;
75 }
76 int deleteElem(SL *L,int n){
77 int i;
78 if(n>L->length)
79 return 1;
80 if(n<1 || n>L->length+1)
81 return 1;
82 if(n <= L->length){
83 for(i=n-1;i<L->length;i++)
84 L->data[i] = L->data[i+1];
85 }
86 L->length--;
87 return 0;
88 }
运行结果
- 理解OAuth 2.0
- node.js应用Redis数据库
- apache服务器配置
- udev实现热插拔
- 《Redis设计与实现》读书笔记(九) ——Redis集合和有序集合实现原理
- 内存对齐的三条原则
- 《Redis设计与实现》读书笔记(十) ——Redis对象相关其他设计与实现
- CI一些优秀实践
- 《Redis设计与实现》读书笔记(十一) ——Redis数据库与键空间
- assert断言
- 什么是堆和栈,它们在哪儿?
- contain_of宏定义
- 《Redis设计与实现》读书笔记(十三) ——Redis数据库其他内容与总结
- 《Redis设计与实现》读书笔记(十四) ——Redis RDB文件创建、载入与自动保存原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- node.js + postgres 从注入到Getshell
- ELK-logstash-6.3.2部署
- K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙
- ELK-logstash-6.3.2-常用配置
- ELK-elkstack-使用消息队列
- kafka_2.11-2.0.0_安装部署
- 谈escapeshellarg绕过与参数注入漏洞
- Django debug page XSS漏洞(CVE-2017-12794)分析
- kafka_2.11-2.0.0_常用操作
- shell脚本:通过域名获取证书的过期时间
- Shell按行读取文件的3种方法
- 客户端 session 导致的安全问题
- Shell脚本常用模板
- 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
- GitHub-创建仓库与本地同步