《大话数据结构》读书笔记(三)
来源:互联网 发布:传奇霸业法师武魂数据 编辑:程序博客网 时间:2024/05/21 08:51
线性表
零个或多个数据元素的有限序列。
线性表的顺序存储结构
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
C语言描述线性表的顺序存储结构
/** * 描述顺序存储结构需要三个属性: * 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。 * 线性表的最大存储容量:数组长度MaxSize * 线性表的当前长度: length */#define MAXSIZE 20 /*存储空间初始分配量*/typedef int ElemType; /*ElemType类型根据实际情况而定,这里假设为int*/typedef struct { ElemType data[MAXSIZE]; /*数组存储数据元素,最大值为MAXSIZE*/ int length; /*线性表当前长度*/}SqList;
数据长度与线性表长度区别
在任何时刻,线性表的长度应该小于等于数组的长度。
顺序存储结构的代码实现
#include <stdio.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /*存储空间初始分配量*/typedef int ElemType; /*ElemType类型根据实际情况而定,这里假设为int*/typedef struct { ElemType data[MAXSIZE]; /*数组存储数据元素,最大值为MAXSIZE*/ int length; /*线性表当前长度*/}SqList;typedef int Status;/*** 获得元素操作* Status是函数的原型,其值是函数结果状态代码,如OK等* 初始条件:顺序线性表L已存在* 操作结果:用e返回L中第i个数据元素的值*/Status GetElem(SqList L, int i, ElemType *e){ if (L.length == 0 || i < 1 || i > L.length) { return ERROR; } *e = L.data[i - 1]; return OK;}/*** 插入操作*/Status ListInsert(SqList *L, int i, ElemType e){ int k; //线性表已满 if (L->length == MAXSIZE) { return ERROR; } //i不在范围中 if (i < 1 || i > L->length + 1) { return ERROR; } if (i <= L->length) { for (k=L->length-1; k >=i-1; k--) //将要插入位置后数据元素向后移动一位 { L->data[k+1] = L->data[k]; } } L->data[i - 1] = e; L->length++; return OK;}/*** 删除操作*/Status ListDelete(SqList *L, int i, ElemType *e){ int k; //不能为空 if (L->length == 0) { return ERROR; } //删除位置不正确 if (i < 1 || i > L->length) { return ERROR; } *e = L->data[i - 1]; if (i < L->length) { for (k = i;k < L->length;k++) { L->data[k-1] == L->data[k]; } } L->length--; return OK;}int main(void){ SqList list = { {1,2,3,4}, 4 }; int key = 3; ElemType result; /*测试GetElem*/ GetElem(list,key, &result); printf("获得元素操作结果%d\n", result); /*测试ListInsert*/ ElemType value = 123; ListInsert(&list,key,value); printf("获得元素操作结果%d\n", list.data[--key]); /*测试ListDelete*/ ListDelete(&list,key,&result);}
线性表顺序存储结构的优缺点
优点
- 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
- 可以快速地存取表中任意位置的元素
缺点
- 插入和删除操作需要移动大量元素
- 当线性表长度变化较大时,难以确定存储空间的容量
- 造成存储空间的“碎片”
阅读全文
0 0
- 《大话数据结构》读书笔记(三)
- 《大话数据结构》读书笔记(三)
- 大话数据结构读书笔记(三)-线性表
- 大话数据结构读书笔记系列(三)线性表
- 《大话数据结构》读书笔记(一)
- 《大话数据结构》读书笔记(二)
- 《大话数据结构》读书笔记(四)
- 《大话数据结构》读书笔记(五)
- 《大话数据结构》读书笔记(1)
- 《大话数据结构》读书笔记(2)
- 《大话数据结构》读书笔记(一)
- 《大话数据结构》读书笔记(二)
- 大话数据结构——读书笔记(2)
- 【读书笔记】大话数据结构之 栈(1)
- 大话数据结构读书笔记系列(二)算法
- 大话数据结构读书笔记系列(五)串
- 大话数据结构读书笔记(二)-算法
- 大话数据结构读书笔记(五)-串
- 苹果终于入伙 WebRTC,新一代移动 Web 应用爆发路上还有哪些坑?
- Kotlin Reference (六) 接口
- windows下vim编码乱码
- 特征离散化系列(一)方法综述
- 开发一个功能之前需要问的问题
- 《大话数据结构》读书笔记(三)
- LeetCode-389. Find the Difference (Java)
- js基础-表单验证和提交
- iptables网络访问控制
- Linux文件目录介绍及文件颜色
- 常用通信协议
- MySQL的几个概念:主键,外键,索引,唯一索引
- Git的详细使用
- HMM学习最佳范例:维特比算法(Viterbi Algorithm)