数据结构学习笔记——顺序存储结构
来源:互联网 发布:中国软件国际地址 编辑:程序博客网 时间:2024/05/16 08:45
顺序表:用一组地址连续的存储单元一次存放线性表中的数据元素。
线性表的起始地址称为线性表的基地址。
所有元素的存储位置均取决于第一个元素的存储位置。设
也就是说只要知道顺序表首地址和每个数据元素所占地址单元的个数就可求出第i个数据元素的地址来,这也是顺序表具有按数据元素的序号随机存取的特点。
存取结构
存取结构与存储结构是两个不同的概念
存取结构是在一个数据结构上对查找操作的时间性能的一种描述。
通常有两种存取结构:随机存取结构和顺序存取结构
- 随机存取结构:指在一个数据结构上进行查找的时间性能是
O(1) 。顺序表就是一种随机存取结构。 - 顺序存取结构:指在一个数据结构上进行查找的时间性能是
O(n) 。单链表就是一种顺序存取结构。
顺序映像的C语言描述
- 静态分配
#define LISTSIZE 100 //存储空间最大分配量typedef struct{ ElemType elem[LISTSIZE]; int length; //当前长度}SqList;
- 动态分配
#define LIST_INIT_SIZE 100#define LISTINCREMENT 10 //分配增量typedef struct{ ElemType *elem;//存储空间基址 int length;//当前长度 int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)}SqList;
插入操作
线性表的插入是指在表的第
插入后使原表长为 n的表:
顺序表上完成这一运算则通过以下步骤进行:
① 将
后移一个元素)
② 将 x 置入空出的第i个位置;
③ 修改表长。
Status ListInsert_Sq(SqList &L, int i, ElemType e) { // // 在顺序线性表L的第i个元素之前插入新的元素e, // i的合法值为1≤i≤ListLength_Sq(L)+1 ElemType *p; if (i < 1 || i > L.length+1) return ERROR; // i值不合法 if (L.length >= L.listsize) { // 当前存储空间已满,增加容量 ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof (ElemType)); if (!newbase) return ERROR; // 存储分配失败 L.elem = newbase; // 新基址 L.listsize += LISTINCREMENT; // 增加存储容量 } ElemType *q = &(L.elem[i-1]); // q为插入位置 for (p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p; // 插入位置及之后的元素右移 *q = e; // 插入e ++L.length; // 表长增1 return OK;} // ListInsert_Sq
顺序表上的插入运算,时间主要消耗在了数据的移动上,在第i个位置上插入 x ,从
删除操作
线性表的删除运算是指将表中第 i (i 的取值范围为 :
删除后使原表长为 n 的线性表:
顺序表上完成这一运算的步骤如下:
① 将
② 修改表长。
Status ListDelete_Sq(SqList &L, int i, ElemType &e) { // // 在顺序线性表L中删除第i个元素,并用e返回其值。 // i的合法值为1≤i≤ListLength_Sq(L)。 ElemType *p, *q; if (i<1 || i>L.length) return ERROR; // i值不合法 p = &(L.elem[i-1]); // p为被删除元素的位置 e = *p; // 被删除元素的值赋给e q = L.elem+L.length-1; // 表尾元素的位置 for (++p; p<=q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移 --L.length; // 表长减1 return OK;} // ListDelete_Sq
顺序表的删除运算与插入运算相同,其时间主要消耗在了移动表中元素上,删除第
顺序表的插入、删除需移动大量元素
- 数据结构学习笔记——顺序存储结构
- 数据结构—二叉链顺序存储结构
- 数据结构学习笔记——二叉树的存储结构
- 数据结构与算法——线性表顺序存储结构
- 数据结构——线性表的顺序存储结构
- 数据结构五—循环队列的顺序存储结构
- 数据结构之线性表—>顺序存储结构
- 数据结构学习笔记9--栈和队列的顺序存储结构
- [学习笔记]顺序存储结构和单链表
- 数据结构笔记之一线性表顺序存储结构
- 数据结构笔记之线性表的顺序存储结构
- 数据结构笔记:线性表顺序存储结构(C语言)
- 数据结构和算法笔记 lesson3 线性表顺序存储结构
- 【数据结构】字符串顺序存储结构
- 数据结构的顺序存储结构
- 数据结构学习---线性表顺序存储结构的基本操作
- 数据结构——线性表之顺序存储学习
- 数据结构学习笔记(六)-- 栈的顺序结构
- malloc和new的区别---当malloc和string相遇时, 容易出错
- Android的ImageView图片
- 数据结构链表总结一
- HDU 1035 && poj 1573 Robot Motion【模拟】
- 我的2015:行走篇
- 数据结构学习笔记——顺序存储结构
- 淘宝违规考试软件1.0
- linux系统的体系结构以及文件数据结构
- windows(win8)和linux(CentOS6)上的telnet的开启和使用
- iptables详解
- Logistic Regression详解
- Java 和 C 的入门案例
- IEEE floating point
- 解决zlib编译不过