顺序表

2 线性表

狂风中的少年 提交于 2019-12-06 12:05:46
转:https://blog.csdn.net/csdn_aiyang/article/details/84863136 第1节:线性表 1.1 概念 线性表是一种简单的线性结构,特点是在非空的有限集合中,且第一个元素没有直接前驱元素,最后一个元素没有直接后继元素,其他元素都有唯一的前驱和后继元素。线性表有顺序存储结构和链式存储结构。 1.2顺序存储结构 是指将线性表中的各个元素依次存放在一组地址连续的存储单元中,通常将这种方法存储的线性表称为顺序表。 假设,线性表的每个元素需占用m个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个元素的存储位置location(ai+1)和第i个元素的存储位置location(ai)之间满足关系location(ai+1)=location(ai)+m。线性表中第i个元素的存储位置与第一个元素的a1的存储位置满足以下关系,location(ai) =location(a1)+(i-1)*m。其中,第一个元素的位置location(a1)称为起始地址或基地址。 顺序表逻辑上相邻的元素在物理上也是相邻的。每一个数据元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比的常数。只要确定了第一个元素的起始位置,线性表中的任一个元素都可以随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构

线性表

一世执手 提交于 2019-12-06 11:40:32
一、基本概念 线性表:由n(n>=0)个数据特性相同的元素构成的有限序列称为线性表。线性表中元素的个数n定义为线性表的长度,n=0时称为空表。 顺序表 :是线性表的顺序存储结构的一种别称。 特点:是以“存储位置相邻”表示两个元素之间的前驱、后继关系。 优点:是可以随机存取表中任意一个元素。 缺点:是每作一次插入或删除操作时,平均来说必须移动表中一半元素。 常应用于主要是为查询而很少作插入和删除操作,表长变化不大的线性表。 链表 :是线性表的链式存储结构的别称。 特点:是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存储单元中。 优点:是便于进行插入和删除操作。 缺点:是不能进行随机存取,每个元素的存储位置都存放在其前驱元素的指针域中,为取得表中任意一个数据元素都必须从第一个数据元素起查询。 二、线性表的表示与实现 1、顺序表示和实现 #include <iostream> using namespace std; //顺序表的存储结构,ElemType假设为int #define MAXSIZE 100 typedef struct{ int *elem; int length; }SqList; //顺序表的初始化 bool InitList(SqList &list){ list.elem =new int[MAXSIZE]; list.length=0;

[DS+Algo] 002 一维表结构

南笙酒味 提交于 2019-12-06 05:39:45
目录 1. 顺序表 1.1 分类 1.2 实现方式 1.3 扩容问题 1.4 操作 2. 链表 2.1 分类 2.2 链表相关操作 2.3 链表 VS 顺序表 3. 关于代码实现 1. 顺序表 1.1 分类 简单顺序表 索引顺序表 数据可以很不规则 数据物理排列可以不要求 索引的格式规整 1.2 实现方式 以更改是否方便为准 一体式 分离式 1.3 扩容问题 每次定量增长:节省空间,操作频繁 每次按比例增长:浪费 1.4 操作 增加 保存尾端插入 非保存 保存 删除:和增加类似 Python-list 操作 分离技术实现的动态表 空表:8 个位置 插入满:扩大 4 倍 若果已经很大(如,>50000):加 1 倍 2. 链表 2.1 分类 单向链表 单向循环链表 双向链表 2.2 链表相关操作 is_empty() 判断链表是否为空 length() 返回链表的长度 traverse() 遍历 add_first(item) 在头部添加一个结点(节点) append(item) 在尾部添加一个结点 insert(pos, item) 在指定位置 pos 添加一个结点 remove(item) 删除一个结点 search(item) 查找结点是否存在 2.3 链表 VS 顺序表 下方 n 表示时间复杂度为 O(n) ,同理, 1 指 O(1) 访问元素:n, 1 头部插入:1, n

C++ 运算符优先级顺序表 (最新 / 完整)

断了今生、忘了曾经 提交于 2019-12-06 04:33:27
注: 运算符优先级 不受运算符重载影响 。 如需钻研 C++ 运算符优先级,可以参考 cppreference ,其提供了详细的注解。 Post author 作者: Grey Copyright Notice 版权说明: Except where otherwise noted, all content of this blog is licensed under a CC BY-NC-SA 4.0 International license . 除非另有说明,本博客上的所有文章均受 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 保护。 优先级 运算符 结合律 助记 1 :: 从左至右 作用域 2 a++ 、 a-- 、 type() 、 type{} 、 a() 、 a[] 、 . 、 -> 从左至右 后缀自增减、 函数风格转型、 函数调用、下标、 成员访问 3 ! 、 ~ 、 ++a 、 --a 、 +a 、 -a 、 (type) 、 sizeof 、 &a 、 *a 、 new 、 new[] 、 delete 、 delete[] 从右至左 逻辑非、按位非、 前缀自增减、正负、 C 风格转型、取大小、取址、 指针访问、 动态内存分配 4 .* 、 ->* 从左至右 指向成员指针 5 a*b 、 a/b 、 a%b 从左至右 乘除、取模 6 a

顺序表

≯℡__Kan透↙ 提交于 2019-12-06 01:16:16
顺序表的1基本操作的代码在下文都有,并且经过初步测试,如果有大佬发现不对的地方,还望多多指正,谢谢。 1.线性表 线性表:n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。(画图没弄整齐--^_^--) 顺序表: 基本内容如图: 1概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。 顺序表一般可以分为: 1. 静态顺序表:使用定长数组存储。 2. 动态顺序表:使用动态开辟的数组存储 #define Capacity 100 typedef int DataType; //表中保存的数据类型,在前面用typedef关键字再给类型名,方便一改全改 struct SeqList{ DataType array[Capacity]; //保存顺序表中元素,Capacity是数组总容量 size_t size; //记录有效元素个数 }; 静态顺序表实质就是固定容量的数组加一个有效元素计数。 顺序表的具体操作以动态顺序表来展示: typedef int DataType; //存放的数据类型

线性表_顺序表的删除

↘锁芯ラ 提交于 2019-12-05 20:24:32
/* 函数功能:顺序表的元素删除 函数输入:顺序表地址、删除位置、接收删除值的元素 函数输出:删除成功,返回1;删除失败,返回0 */ #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int last; }SeqList; //顺序表的删除(将顺序表中下标为k的元素删除) int Delete(SeqList *L,int k,ElemType *e) { int j; if (L->last == 0) //空表 return 0; if (k < 0 || k > L->last) //删除非法 return 0; *e = L->data[k]; for (j = k;j <= L->last;j++) L->data[j] = L->data[j+1]; L->last--; return 1; } /* 算法思想:1.判断是否为空表 2.判断删除位置是否为合法位置 3.将要删除的元素放入e中 4.从第k+1个元素开始,将元素依次向前移动一个单位 */ 来源: https://www.cnblogs.com/Safe-Man/p/11945262.html

线性表

谁说我不能喝 提交于 2019-12-05 17:16:46
1.线性表的定义: 由n(大于0)个具有相同类型的数据元素组成的有限序列,也简称为表。 2.线性表的逻辑结构:      线性表的相邻元素之间存在着序偶关系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一个顺序表,则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱。 3.线性表的特征: 1.集合中必存在唯一的一个“第一元素”。 2.集合中必存在唯一的一个 “最后元素” 。 3.除最后一个元素之外,均有唯一的后继(后件)。 4.除第一个元素之外,均有唯一的前驱(前件)。 4.顺序表: 采用顺序存储的线性表称之为顺序表。 使用顺序表存储集合 {1,2,3,4,5} ,数据最终的存储状态如图 所示: (1)线性表顺序存储的特点:       1.线性表中所有元素所占的存储空间是连续的。       2.线性表中各个数据元素在存储空间中是按逻辑顺序依次存放的。 (2)地址计算方式:线性表L每个元素之间的地址存在下列关系:Loc(ai)=Loc(ai-1)+d,其中d表示线性表L中每个元素占用d个存储单位。 由此可以推出公式:Loc(ai)=Loc(a1)+(i-1)*d。 以下代码实现以下线性表: #include

线性表的顺序存储结构

≯℡__Kan透↙ 提交于 2019-12-05 05:26:32
首先让我们来认识顺序表 在顺序存储结构中,以数据元素的长度为单位,所以每个元素之间的距离为L。 在顺序存储结构中,数据的存储位置和它们的物理位置一致,因此较为简单、自然 使用C语言描述顺序存储结构下的线性表代码如下: #define MAXSIZE 100 //线性表的最大长度 typedef struct Linear_list { datatype elem[MAXSIZE]; //定义数组域 int last; //最后一个元素在表中的位置 }SeqList; 需要注意的有以下问题 (1)数组的长度和线性表的长度不是一个概念。数组的长度是存放线性表的存储空间的长度,线性表的长度是线性表中数据元素的个数,它随着插入、删除等操作会发生变化,而数组的长度一开始就被定义且不可改变。 (2)线性表的当前长度:由于last表示最后一个元素1在表中的位置,而且元素是从0开始,所以当前长度为last+1。 (3)线性表的最大容量为一开始为线性表分配的MAXSIZE决定,后序不可更改。 (4)elem[]即用来存储数据的数组。 在C语言中,为了发挥指针的优势,我们可以定义一个指向SeqList类型的指针,即: SeqList *Lp; Lp是一个指针变量,存储空间通过 C Lp=(SeqList*)malloc(sizeof(SeqList)) 来获得。Lp是存放的顺序表的地址 #

数据结构/算法——线性表*

余生长醉 提交于 2019-12-05 05:09:20
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。 线性表有两种方式: 1.顺序线性表 (也就是用数组实现的,在内存中有顺序排列) 2.链式线性表也叫链表 (不是用顺序实现的,用指针实现,在内存中不连续) 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。一维数组就是顺序表的一种实现。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。 来源: oschina 链接: https://my.oschina.net/u/2260928/blog/510802

顺序表的查找--简单

泪湿孤枕 提交于 2019-12-05 03:49:16
源程序: #include <stdio.h> #define MaxSize 8 typedef struct { int stuno; char stuname[20]; }TableElem; TableElem stu[]={{1001,"zhang"},{1009,"wang"},{2005,"sun"},{2008,"liu"},{3001,"zheng"}, {3005,"lai"},{4003,"qin"},{4400,"ren"}}; typedef struct { TableElem elem[MaxSize]; int n; }SqTable; int searchsqtable(SqTable T,int key) //查找函数 { T.elem[0].stuno=key; int i=T.n; while(T.elem[i].stuno!=key) i--; return i; } int main() { SqTable seq; for(int i=0;i<MaxSize;i++) { seq.elem[i]=stu[i]; } seq.n=MaxSize; int kk,mm; printf("请输入要查找的学号:"); scanf("%d",&kk); mm=searchsqtable(seq,kk); //调用查找函数 printf(