线性表

线性表的顺序存储实现(数组形式)称为顺序表。

线性表顺序表示原理解析

image image 这里描述的线性表是逻辑结构的,独立于存储结构。 线性表的顺序表示简称顺序表。 image 顺序表实现线性表的方式是使用数组。 image image image 线性表第一个元素的数组下标是0。 image image

另外一种实现顺序表的方法:

image 使用数组方式比动态分配更简单常用。 动态分配的数组仍属于顺序存储结构。


顺序表的初始化插入、删除、查询代码
1#include <stdio.h> 2 3#define MaxSize 50 4typedef int Elemtype; //定义ElemSize为int类型,当ElemSize的类型发生改变时可以迅速完成代码修改 5typedef struct { 6 Elemtype data[MaxSize]; 7 int length; //顺序表长度 8}SqList; 9bool ListInsert(SqList& L, int i, Elemtype element) //插入会改变顺序表L 10{ 11 if (i >= 1 && i <= L.length + 1) //判断插入位置i是否合法 12 { 13 if (MaxSize >= L.length) //判断存储空间是否已满 14 { 15 for (int j = L.length; j >= i; j--) 16 { 17 L.data[j] = L.data[j - 1]; //要插入位置后的元素后移 18 } 19 L.data[i - 1] = element; //放入要插入的元素 20 L.length++; //插入后顺序表的长度+1 21 return true; //插入成功返回true 22 } 23 } 24 return false; 25} 26void PrintSqList(SqList L) //打印顺序表 27{ 28 for (int i = 0; i < L.length ; i++) 29 { 30 printf("%3d", L.data[i]); 31 } 32 printf("\n"); 33} 34bool ListDelete(SqList& L, int i, Elemtype& del) //删除会改变顺序表L,del获取删除元素的值 35{ 36 if (i < 1 || i > L.length + 1) //判断删除位置i是否合法 37 { 38 return false; 39 } 40 del = L.data[i - 1]; 41 for (i; i <= L.length; i++) 42 { 43 L.data[i - 1] = L.data[i]; 44 } 45 L.length--; 46} 47int LocateElem(SqList L, Elemtype element) //查找元素 48{ 49 for (int i = 0; i < L.length; i++) 50 { 51 if (element == L.data[i]) 52 { 53 return i + 1; //i是数组下标,i+1后才是顺序表的下标 54 } 55 } 56 return 0; 57} 58int main() 59{ 60 SqList L; //定义顺序表L 61 bool ret; //bool是类型 62 //顺序表元素定义 63 L.data[0] = 3; 64 L.data[1] = 12; 65 L.data[2] = 73; 66 L.data[3] = 84; 67 L.data[4] = 25; 68 L.data[5] = 65; 69 L.length = 6; //设置顺序表长度 70 PrintSqList(L); 71 ret = ListInsert(L, 2, 10); //传入顺序表L、要插入的位置、要插入的数值 72 if (ret) //true值为1,false值为0 73 { 74 printf("Insert SqList Success\n"); 75 PrintSqList(L); 76 } 77 else 78 { 79 printf("Insert SqList failed\n"); 80 } 81 Elemtype del; 82 ret = ListDelete(L, 3, del); //传入顺序表L、要删除的位置、要删除的数值 83 if (ret) //true值为1,false值为0 84 { 85 printf("Delete SqList Success\n"); 86 PrintSqList(L); 87 printf("要删除的元素是:%d\n", del); 88 } 89 else 90 { 91 printf("Delete SqList failed\n"); 92 } 93 int pos; //存储元素位置 94 pos = LocateElem(L, 824); 95 if (pos) 96 { 97 printf("要查询的元素位置在顺序表中第%d个\n",pos); 98 } 99 else 100 { 101 printf("顺序表中没有要查询的元素\n"); 102 } 103 return 0; 104}
点赞
收藏

评论区

加载中...

相关推荐

【数据结构之链表】看完这篇文章我终于搞懂链表了

一览:本文从零介绍链式存储结构的线性表——单链表。包括以下内容:什么是链式存储存储结构?单链表的结构辨析头结点、头指针等易混淆概念基本的增删改查操作(不带头结点和带头结点)单链表与顺序表的对比线性表的链式存储结构在一文中我们介绍了一种“用曲线连接”的线性表,“曲线”是一种形象化的语言,实际上并不会存在所谓“曲线”的这种东西。所谓“曲线连

查找算法

顺序查找顺序查找又称为线性查找,对线性表和链表都适用。线性表可以通过数组下标递增来顺序扫描每个元素,链表可以通过next指针依次扫描每一个元素。:::tip指针实现顺序表时,顺序表中是指针时,在定义顺序表的结构体后,需要对顺序表初始化,初始化时为指针申请堆

【数据结构之栈】用详细图文把「栈」搞明白(原理篇)

【系列文章合集】顺序存储结构的线性表(https://mp.weixin.qq.com/s/OGbxsh0aNh1woHA85weZw)如何掌握C语言的一大利器——指针?(https://mp.weixin.qq.co

【数据结构之顺序表】用图和代码让你搞懂顺序结构线性表

什么是线性表?所谓线性,即一条线,这条线可以是直线,也可以是曲线。所谓表,肯定都不陌生,生活中有各种各样的表或者表格。我们在表格中填写各种各样的信息,通过表格,能够很好地对信息进行分类储存和分析。表的特点有:表由若干单元格组成单元格之间有顺序除特殊位置的单元格(首起和结尾)有一个“邻居”外,其他单元格都有两个“邻居”。那么什么是线性表呢?简单来说,就是

Java实现顺序栈

一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈

D1

1\.数据结构  1.1线性结构  (1)最常用的数据结构,特点是数据元素之间存在一对一的线性关系  (2)有两种不同的存储结构,即顺序存储结构和链式存储结构    顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的    链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息