顺序表

线性表的顺序存储结构

不打扰是莪最后的温柔 提交于 2019-12-23 00:54:18
必做题)设计并验证以下算法:设顺序表A和B中的数据元素为整数且单调递增有序,将这两张表合并成顺序表C。 (1) 顺序表C单调递减有序。 (2) 根据键盘输入数据建立顺序表A和B。 (3) 输出顺序表A、B和C。 # include "stdio.h" # include "malloc.h" # include "stdlib.h" # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define OVERFLOW -1 # define OK 1 typedef int ElemType ; typedef int Status ; typedef struct { ElemType * elem ; int length ; int listsize ; } SqStack ; Status InitList_Sq ( SqStack * ) ; void Create_Sq ( SqStack * ) ; void Print_Sq ( SqStack ) ; void Merge_Sq ( SqStack , SqStack , SqStack * ) ; int Check_Sq ( SqStack ) ; int main ( ) { int ans ; SqStack la , lb , lc ;

线性表(一)—— 顺序表

血红的双手。 提交于 2019-12-22 16:23:14
线性表(一)—— 顺序表 定义 顺序表 是在计算机内存中以数组的形式保存的线性表; 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中, 即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 采用顺序存储结构的线性表通常称为顺序表。 顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到: LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。 优缺点 优点: 无需为表示表中元素的逻辑关系而增加额外的存储空间 可以快速地存取表中任意位置的元素 缺点: 插入和删除需要移动大量的元素 当顺序表长度变化较大时,难以确定存储空间的容量 造成存储空间的碎片 算法复杂度 线性表存读数据的时候,时间复杂度都是 O(1) 插入、删除的时间复杂度都是 O(n) 说明顺序表比较适合元素个数不不大变化,而更多的是存取数据的应用。 具体操作 1.顺序表的结构定义: # define maxlen 50 //定义顺序表中元素个数最多有几个 typedef struct { elementtype data [ maxlen ] ; //elementtype是元素的类型

链表和队列

对着背影说爱祢 提交于 2019-12-22 10:07:34
1.单链表 所谓单链表,是指数据结点是单向排列的。它包含两个域,一个信息域和一个指针域。 单链表可以解决顺序表需要大量的连续存储空间的缺点,但单链表附加指针域,也带来了浪费存储空间的缺点。 head NULL时则表示一个空链表 此外为了操作上的方便,可以在单链表第一个结点之前附加一个结点,称为头结点。 头结点的指针域指向链表的第一个结点,数据域可以不设任何信息,也可以存放链表元素个数等信息,带头结点的单链表head为空的判定条件为: head->next NULL。 单链表的插入、删除的时间复杂度均为O(n),单链表取数据元素操作的时间复杂度也为O(n)。 2.顺序表 将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。 1.顺序表是线性表,逻辑结构与存储位置吻合。 2.一般采用数组存储。 3.顺序的分类: 顺序表具有头插法,尾插法,从中间任何位置插入,头删法,尾删法,从中间任何位置删除。 3.顺序表和链表的比较 1)存取方式 顺序表可以顺序存取,也可以随机存取,链表只能从表头顺序存取元素。 2)查找、插入和删除操作 对于按值查找,当顺序表在无序的情况下,两者的时间复杂度均为O(n);而当顺序表有序的时候,可以折半查找,此时的时间复杂度为O(logn);对于按序号查找,顺序表支持随机访问,时间复杂度仅为O(1),而链表的平均时间复杂度为O(n)。顺序表的插入

数据结构错题汇总

纵然是瞬间 提交于 2019-12-20 23:48:50
第一章: (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 答案:B (6)以下数据结构中,( )是非线性数据结构 A.树 B.字符串 C.队列 D.栈 答案:A 第二章: (2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。 A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B.在第i个结点后插入一个新结点(1≤i≤n) C.删除第i个结点(1≤i≤n) D.将n个结点从小到大排序 答案:A 解释:在顺序表中插入一个结点的时间复杂度都是O(n2),排序的时间复杂度为O(n2)或O(nlog2n)。顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是O(1)。 (5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 答案:D (8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( )。 A.n B.2n-1 C.2n D.n-1 答案:A 解释:当第一个有序表中所有的元素都小于(或大于

线性表的顺序实现

霸气de小男生 提交于 2019-12-18 21:53:59
文章目录 线性表的定义 线性表的抽象数据类型定义 线性表的顺序表示和实现 元素存储位置的计算 顺序表的实现 顺序表的初始化 顺序表的销毁 清空顺序表 求顺序表长度 判断顺序表是否为空 顺序表的插入 顺序表的删除 顺序表的查找 查找指定元素值的位置 查找指定位置的元素值 最后 源代码 本篇文章将讲解线性表的顺序实现。 线性表的定义 线性表是由n(n >= 0)个数据元素(结点)a 1 ,a 2 ,…,a n 组成的有限序列,其中数据元素的个数n定义为表的长度,当n = 0时称为空表。 比如序列{a 1 ,a 2 ,…,a i-1 ,,a i ,a i+1 ,a n },其中元素a 1 被称为线性起点或起始结点,元素a n 被称为线性终点或终端结点。对于元素a i ,a i-1 被称为a i 的直接前驱,a i+1 被称为a i 的直接后继。 所以,对于同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。 由此,我们得知线性表的以下特征(非空情况下): 有且仅有一个开始结点,它没有直接前驱,而仅有一个直接后继 有且仅有一个终端结点,它没有直接后继,而仅有一个直接前驱 其余的内部结点都有且仅有一个直接前驱和一个直接后继 线性表的抽象数据类型定义 抽象数据类型在前面的专栏文章中就说到了,这里我就直接写出抽象数据类型线性表的定义: ADT List { 数据对象:D = { ai

C++之运算符优先级顺序表

随声附和 提交于 2019-12-16 15:48:31
[注] sizeof 的操作数不能是 C 风格转型:表达式 sizeof (int) * p 无歧义地解释成 (sizeof(int)) * p ,而非 sizeof((int)*p) 。 条件运算符中部( ? 与 : 之间)的表达式分析为如同其带有括号:忽略其相对于 ?: 的优先级。 另外: 运算符优先级 不受运算符重载影响 。 C++ 运算符优先级,详情参考 cppreference 。 [注] sizeof 的操作数不能是 C 风格转型:表达式 sizeof (int) * p 无歧义地解释成 (sizeof(int)) * p ,而非 sizeof((int)*p) 。 条件运算符中部( ? 与 : 之间)的表达式分析为如同其带有括号:忽略其相对于 ?: 的优先级。 另外: 运算符优先级 不受运算符重载影响 。 C++ 运算符优先级,详情参考 cppreference 。 来源: https://www.cnblogs.com/phillee/p/11540741.html

数据结构与算法---动态数组(2)顺序栈ArrayStack、双端栈ArrayStackDoubleEnd

99封情书 提交于 2019-12-12 07:28:54
栈的顺序存储结构 a.栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表 我们把允许插入和删除的一端称为栈顶,另一端称为栈底 栈又称为后进先出的线性表 定义中说的时在线性表的表尾进行插入和删除,这里 表尾是栈顶 栈的插入操作,叫做进栈,也称压栈,入栈 栈的删除操作,叫做出栈,也称弹栈 b.栈的接口定义 成员变量,成员函数 我们可以将顺序表看成时栈的一个成员变量 c.接口的实现 接口的实现我们都可以基于顺序表来实现,直接调用顺序表的方法 双端栈的顺序存储结构 是指将一个线性表的两端当作栈底分别经行入栈和出栈操作 双端栈的内部变量 因为双端栈需要在两端都可以进行操作,所以简单的顺序表就已经不能实现它了,我们则需要重写他的底层实现 成员变量 成员函数 获取栈中所有有效元素的个数 1.当前栈分为左右两个部分,我们想要获取栈中全部的有效个数,则需要分别获取左右两边的有效元素个数 2.左边有效元素个数就是栈底位置+1(lefttop+1) 3.右边有效元素个数为数组的长度-右端顶的位置(data.length-righttop) 3.将左右两个有效元素个数相加,则为栈中所有有效元素的个数 判断栈是否为空 我们继续将他从左右两边分开判断 1.判断左栈是否为空 lefttop=-1; 2.判断右栈是否为空righttop=data.length; 3.如果左右两边同时为空,则栈为空,否则就不为空

Java数据结构之线性表

北城以北 提交于 2019-12-11 06:34:00
这篇文章我们来说说Java里一个很重要的数据结构——线性表,还是这张图,线性表对应着下图里的List。 红框里的内容就是线性表的大家族了,其中黄色部分是要重点了解的, 线性表里的元素是按线性排列的(这里的线性指逻辑上的) 线性表分为两大类,分别是顺序表和链表 : 一、顺序表 顺序表中的数据元素存储是连续的,内存划分的区域也是连续的。存储结构如下图: 我们的ArrayList底层是数组实现的,底层元素在内存中是按顺序排列的, ArrayList 是Java中顺序表的体现。 二、链表 链表在物理存储上通常是非连续、非顺序的方式存储的,数据元素的逻辑顺序是通过链表中的引用来实现的。 1、 单向链表 很简单,内存中的对象是随机分布的,对象不但存储了张三、李四等数据,还持有一个next引用,指向下一个对象,来确定一组对象的逻辑顺序。 2、 循环链表 也很简单,和单向链表一样,只不过最后一个对象的next又指向了第一个对象。 3、 双向链表 不但持有next引用,指向下一个对象,还持有一个prev引用,指向上一个对象。 记住双向链表这个图,很重要,下一篇文章我们要讲的LinkedList就是以双向链表的方式实现的。 三、栈和队列 栈和队列是两种比较特殊的线性表。 1、 栈 栈是一种操作受限制的线性表 。其限制是仅允许在线性表的尾部进行添加和删除操作,这一端被称为栈顶,另一端称为栈底

数据结构导论 三 线性表-顺序存储

萝らか妹 提交于 2019-12-09 22:52:55
线性表是什么样子呢? 类似这种,可以当作生活中流水线作业是一样的。 线性表是由n(N>=0)个数据元素(结点)比如a1,a2,a3....an组成的有限序列 数据元素的个数n定义为表的长度, 当n=0时为空表(null) 当n>0时为非空表 L=(a1....an) a1称为起始点 ,an为终端结点。 对任意一堆相邻结点ai和ai+1 (1<i<n) ai是ai+1的直接前驱,ai+1是ai的直接后继 (图片来源于网络) 如果吧线性表当作火车就更加明显了,火车只有一个火车头(起始节点)一个车尾(终端结点) 火车头(起始节点)前面没有车厢(直接前驱) 但是后面又一节车厢 (直接后继),车尾(终端结点)后面没有多余的车尾(直接后继) ,但是车尾的前面有一节车厢(直接前驱)。 综上可以了解出 每一个结点且都有一个直接前驱和一个直接后继 线性表的逻辑结构特征 对于非空的线性表:线性表中结点具有一对一的关系(具体可以看上面的火车例子) 1)线性表中有且仅有一个其实结点a1,没有直接前驱,有且仅有一个直接后继a2; 2)有且仅有一个终端结点an,没有直接后继,有些仅有一个直接前驱an-1; 3)其余的内部结点ai(a<=i<=n-1)都有且仅有一个直接前驱ai-1和一个直接后继ai+1; 线性表的基本运算 初始化 Initiate 秋表长度Length 取表元 get 定位 Locate

数据结构与算法2.1_MOOC笔记

限于喜欢 提交于 2019-12-06 13:45:25
2.1线性表 简称表,是零个或多个元素的有穷序列 表目:表中的元素 索引(下标):i称为ki的下标 表的长度:所含元素个数n 空表:长度为0(n=0) 特点:操作灵活,其长度可以增长、缩短 适用于小规模数据 线性结构 为前驱/后继关系,有反对称性和传递性 有一个唯一的开始节点,没有前驱,有一个唯一的直接后继 有一个唯一的终止节点,有一个唯一的直接前驱,没有后继 其它节点皆称为内部节点,每一个内部节点都有一个唯一的直接前驱,也有一个唯一的直接后继 <ai,ai+1>ai是ai+1的前驱,ai+1是ai的后继 特点: 均匀性:元素必定具有相同的数据类型和长度 有序性:各元素之间的相对位置是线性的 按复杂程度划分 简单的:线性表、栈、队列、散列表 高级的:广义表、多维数组、文件...... 按访问方式划分 直接访问型(Direct Access):根据下标访问(数组) 顺序访问型(Sequential Access):顺序查找(链表) 目录索引型(Directory Access):有效索引(字典,散链) 按操作划分 线性表 所有表目都是同一类型节点的线性表 不限操作形式 根据存储的不同分为:顺序表,链表 栈(LIFO,Last In First Out) 插入和删除操作都限制在表的同一端进行 队列(FIFO,First In First Out) 插入操作在表的一段,删除操作在另一端