【数据结构与算法02】 顺序表

简介: 顺序存储:逻辑上相邻的元素存在地址相邻的区域内,每个元素占的空间都相等

线性表


定义


具有相同的数据类型的几个数据元素有限序列,其中n为表长,当n=0时线性表是空表,如下:



线性表的基本操作(创销、增删改查)


  1. InitList(&L):初始化表,构造空的线性表L,分配内存空间
  2. DestroyList(&L):销毁操作,销毁线性表,并释放空间
  3. ListInsert(&L,i,e):插入
  4. ListDelete(&L,i,e):删除
  5. LocateElem(L,e):按值查找
  6. GetElem(L,e):按位查找
  7. &L:取L的地址


什么时候传入引用&? --对参数的修改结果需要"带回来"


c49bf6ca3d059cca76b3acca43d27783.jpg


顺序表


逻辑上相邻,物理(地址)上也相邻


顺序存储:逻辑上相邻的元素存在地址相邻的区域内,每个元素占的空间都相等


Q:如何判断一个数据元素的大小


A:sizeof(x),x是数据类型,注意sizeof是C语言32个关键字之一


静态分配


8539ef32da57dcc9cd0b54037284ac9d.jpg


动态分配


f93f099923fbd876ec867828ded12047.jpg


动态申请和释放内存空间


malloc:开辟一片存储空间,返回一个空的指针


L.data=(ElemType *)malloc(sizeof(ElemType) *Initsize)


ElemType *:强制转型你定义的元素指针


例如:data的数据类型为int,则ElemType也应转为int类型


顺序表的特点


  1. 随机访问
  2. 存储密度高
  3. 扩展容量难


初始化顺序表


typedef struct {
  int *data;//指示动态分配数组的指针
  int MaxSize;//顺序表的最大容量
  int lenght;//顺序表的当前长度
} SeqList;
void InitList(SeqList &L) {
  //使用malloc申请一片连续的存储空间:sizeof(int)=4Byte
  L.data = (int *)malloc(InitSize * sizeof(int));
  L.lenght = 0;
  L.MaxSize = InitSize;
}


顺序表的插入删除查找


插入


Screenshot_20221002_085333.jpg


//插入
bool ListInsert(SeqList &L, int i, int e) {
  if (i < 1 || i > L.lenght + 1) {
    return false;
  }
  if (L.lenght > InitSize) {
    return false;
  }
  for (int j = L.lenght; j >= i; j--) {
    L.data[j] = L.data[j - 1];
  }
  L.data[i - 1] = e;
  L.lenght++;
  return true;
}


1.传入L,注意这里的L使用了😉&,所以是传入L的本身,而不是它的复制品


2.使用了一个for循环,让第i-1个元素之后的所有元素,都向后移动一位,同时也能逆向找到插入次序i


for (int j = L.lenght; j >= i; j--) {L.data[j] = L.data[j - 1];}


3.插入元素值,L.data[i - 1] = e;


删除


//删除
bool ListDelete(SeqList &L, int i, int &e) {
  printf("%d\n", i);
  if (i < 1 || i > L.lenght) {
    printf("%d", L.lenght);
    return false;
  }
  e = L.data[i - 1];
  for (int j = i; j < L.lenght; j++) {
    L.data[j - 1] = L.data[j];
  }
  L.lenght--;
  return true;
}


查找


2c4bb9a6f9b336c0e1175dfff90656fb.jpg

相关文章
|
2月前
|
存储 算法 程序员
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
44 0
|
2月前
|
存储 编译器
数据结构:顺序表详解
数据结构:顺序表详解
37 0
|
2月前
|
存储 机器学习/深度学习 API
顺序表:数据结构的建筑积木
朋友们大家好啊,本节内容我们进入数据结构的第二节,顺序表有关内容,同步我们会学习计组原理与cpp相关知识 本节我们重点探讨动态顺序表关于插入数据和删除数据的多种情况的分析
|
存储 索引
数据结构--动态顺序表
数据结构--动态顺序表
|
2月前
|
存储 消息中间件 算法
数据结构从入门到精通——顺序表
顺序表是一种常见的线性数据结构,它使用一段连续的存储单元依次存储数据元素。这种数据结构的特点是逻辑上相邻的元素在物理存储位置上也相邻,因此可以快速地访问表中的任意元素。 顺序表的实现通常依赖于数组,数组是一种静态的数据结构,一旦创建,其大小就是固定的。这意味着在顺序表中插入或删除元素可能会导致空间的浪费或不足。例如,如果在一个已经满了的顺序表中插入一个新元素,就需要重新分配更大的数组空间,并将原有元素复制到新数组中,这是一个相对耗时的操作。
54 0
|
3天前
|
C++
数据结构(顺序表 动态定义
数据结构(顺序表 动态定义
10 2
|
3天前
|
C++
数据结构(顺序表
数据结构(顺序表
10 1
|
3天前
|
存储
【栈】基于顺序表的栈功能实现
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
12 0
|
6天前
|
存储 编译器
【数据结构】~顺序表
【数据结构】~顺序表
|
12天前
|
存储
数据结构第二课 -----线性表之顺序表
数据结构第二课 -----线性表之顺序表