数据结构 线性表之顺序存储
来源:互联网 发布:保持数据库数据一致性 编辑:程序博客网 时间:2024/06/05 22:31
1.线性表的定义:零个或多个相同类型的数据元素的有限序列。若元素为多个,则第一个元素无前驱,最后一个元素无后继,其他的每个元素都有且只有一个前驱和后继。线性表中的每个数据元素可以由若干个数据项组成,这时,数据元素称为记录record,线性表称为文件file。
2.线性表的抽象数据类型:
线性表是一种数据结构,其元素之间存在一一对应的逻辑关系{D,S}。D表示数据元素,S表示数据元素之间的关系。
线性表的抽象数据类型{D,S,P},其中{D,S}表示数据结构,P表示数据结构上的一组操作。
ADT ListData /*一组带结构的数据元素*/Operation INITIATE(L) LENGTH(L) GET(L,i) LOCATE(L,x) INSERT(L,i,b)
3.线性表的物理结构
3.1顺序存储结构:用一段地址连续的存储单元一次存储线性表的数据元素。C语言中用数组为例。
(1)描述线性表需要三个属性:存储空间的起始位置,线性表的最大存储容量(数组长度,即总的存储空间的长度),线性表的当前长度(线性表中数据元素的个数)。
(2)随机存取结构:LOC(ai)=LOC(a1)+(i-1)c;存取操作的时间复杂度为O(1)。
(3)插入:检验当前的list的长度是否超过定义的数组最大长度,检验插入的位置是否合理(插入第i个之前,因此i可以取length+1),移位(若插入的不在表尾),插入,表长加1。
(4)删除:检验list是否为空表,检验删除的位置是否合理,赋值,(若删除的不在表尾)移位,表长-1。
(5)时间复杂度:存取操作O(1),插入删除O(n)。插入平均移动次数为n/2,删除平均移动次数为(n-1)/2。
(6)顺序存储优点:无需表示元素之间的逻辑关系而额外增加存储空间。可以快速存取。
顺序存储缺点:删除插入操作需要大量移动元素。当线性表长度变化较大时,难以确定存储空间的容量。造成存储空间的碎片。
适用:元素个数不太变化,更多是存取数据的应用。
#include <iostream>using namespace std;#define MAXSIZE 20#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int ElemType;typedef int Status;typedef struct{ElemType data[MAXSIZE];int length;}SqList;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 PrintList(SqList *L){for(int i=1; i!=L->length;i++)cout<<L->data[i-1]<<" ";cout<<L->data[L->length-1]<<endl;return OK;}Status ListInsert(SqList *L, int i, ElemType e) //在第i个位置之前插入新的数据元素e,L的长度加1{if( L->length == MAXSIZE) return ERROR;if( i<1 || i>L->length+1 ) return ERROR;if( i<=L->length ){for(int k=L->length;k>=i;k--)L->data[k]=L->data[k-1];}L->data[i-1]=e;L->length++;return OK;}Status ListDelet(SqList *L, int i, ElemType *e)//删除第L个元素,并返回它的值{if(L->length==0) return ERROR;if(i<1 || i>L->length) return ERROR;*e = L->data[i-1];if(i<L->length){for(int k=i+1;k!=L->length+1;k++)L->data[k-2] = L->data[k-1];}L->length--;return OK;}int main(){SqList List1;ElemType find_num;ElemType is_num=18;ElemType dl_num;List1.length = 0;cout<<"The original list: ";for(int i=1; i!=10; ++i){List1.data[i-1]=i;List1.length ++;cout<<List1.data[i-1]<<" ";}cout<<endl;cout<<"The find number: ";if(GetElem(List1,5,&find_num))cout<<find_num<<endl;cout<<"The list after insert: ";ListInsert(&List1,6,is_num);PrintList(&List1);cout<<"The list after deleat: ";ListDelet(&List1,3,&dl_num);PrintList(&List1); system("pause");return 0;}
- 数据结构之线性表--顺序存储
- 数据结构:线性表之顺序存储结构
- 数据结构之线性表顺序存储
- 数据结构 线性表之顺序存储
- 数据结构-线性表之顺序存储结构
- 数据结构之线性表的顺序存储
- 【数据结构】线性表之顺序存储结构
- 数据结构之顺序存储结构线性表
- 数据结构:线性表之顺序存储结构
- 数据结构之线性表顺序存储
- 数据结构--线性表顺序存储
- 数据结构---线性表---顺序存储
- 数据结构(3)之线性表之顺序存储结构
- 数据结构之线性表之顺序存储结构(3)
- 数据结构笔记之线性表的顺序存储结构
- C语言数据结构-1.线性表之顺序存储结构
- 数据结构之线性表的顺序存储结构
- Python 数据结构 之 线性表 的顺序存储结构
- 未能找到元数据文件
- UNIX-高级I/O---记录锁
- 【详解】如何编写Linux下Nand Flash驱动
- Android屏幕解锁图案破解
- alter system flush shared_pool;
- 数据结构 线性表之顺序存储
- linux date日期输出格式
- [linux内存]系统启动过程中的内存管理
- TFS安装配置
- Struts2自定义类型转换器
- MINI6410-SD卡启动QT系统-串口消息
- 【BZOJ】【Usaco刷水合集】
- Android AlarmManager实现自动开关机
- rails 自带ajax函数 observe_field