顺序表

[数据结构]-04顺序表和链表

妖精的绣舞 提交于 2020-01-13 08:51:22
顺序表 按照顺序存储方式存储的线性表称为顺序表。 什么是有序顺序表? 若顺序表中的元素按其值有序,则称其为有序顺序表。 顺序表的插入 设顺序表 A A A 的长度为 n n n ,将字段值为 i t e m item i t e m 的元素插入到第 i i i 个位置,插入步骤如下: 保证顺序表存储空间未满,并且插入位置合法 将第 i i i 个位置元素及其之后的所有元素后移一个位置 插入成功后,线性表长度变为 n + 1 n+1 n + 1 顺序表的删除 设顺序表 A A A 的长度为 n n n ,删除第 i i i 个位置的元素,删除步骤如下: 保证删除位置合服性 将第 i i i 个位置之后的所有元素前移一个位置 删除成功后,线性表长度变为 n − 1 n-1 n − 1 顺序表总结 特点:存储地址连续,数据元素存储依次存放;数据元素类型相同,数据元素可随机存取 优点:存储空间的利用率高,存取速度快,适用于存取需求多的线性表 缺点:静态存储形式,数据元素的个数不能自由扩充 (受存储空间的限制);在插入、删除某个元素时,需要移动大量元素 单链表 结点只有一个指针域的链表成为单链表。 数据域 d a t a data d a t a 存放该结点的数据域的值,指针域 n e x t next n e x t 存放该结点的后继结点的地址信息。 什么是空链表? 若表中只有头结点

4 顺序表和链表

房东的猫 提交于 2020-01-13 01:00:27
时间复杂度- 哪一项在表达式里面权重最大 数据结构- 就是对基本数据(int float .. )的一种组织形式 容器就是数据的存放 {{}} O(1)效率最高 算法和数据结构之间的关系 数据的不同组织形式会影响算法对数据进行相关操作的效率不同 timeit 平均耗时 from timeit import Timer t = Timer('func()','相关设置/from __main__ import func1()') 要是回调的话就不要参数二了 直接放函数 t.timeit(1000) 计算机只能存储二进制数据 也就只能运算二进制数据 变量 就可以表示计算机中的某一块内存空间 内存空间会有2个默认属性: 地址 16进制数表示 大小(可以存怎样的数据量) 整数4字节 64位机8字节 引用 就是(变量) 存储的都是一块内存地址 指向 如果某一个引用/变量存储了某一块内存空间的地址之后,则表示该引用指向了该内存空间 不同的数据占用内存的大小: int 4byte char 1byte float 4 double 8 顺序表 集合中存储中的元素师有顺序的,顺序表的结构可以分为2种: 单数据类型/多数据类型 python中的list tuple 就属于多类型的顺序表 numpy array 就是单类型 单数据类型顺序表的内存图(内存连续开启) 元素是连续存的 顺序表变量的指向

day 2:数据结果之顺序表和链表

好久不见. 提交于 2020-01-12 20:05:47
1.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1 - > 2 - > 4 , 1 - > 3 - > 4 输出: 1 - > 1 - > 2 - > 3 - > 4 - > 4 思路: 想法 我们可以如下递归地定义在两个链表里的 merge 操作(忽略边界情况,比如空链表等): { list1 [ 0 ] + merge (list1 [ 1 : ] , list2 ) list1 [ 0 ] < list 2 [ 0 ] list2 [ 0 ] + merge (list1, list 2 [ 1 : ] ) otherwise \left\{\begin{array}{ll}{ \text { list1 }[0]+\text { merge (list1 }[1:], \text { list2 })} & {\text { list1 }[0]<\text { list } 2[0]} \\ { \text { list2 }[0]+\text { merge (list1, list } 2[1:])} & {\text { otherwise }}\end{array}\right. { list1 [ 0 ] + merge (list1 [ 1 : ] , list2 ) list2 [ 0 ] +

顺序表相关操作实现(Java)

痞子三分冷 提交于 2020-01-11 15:38:41
1.打印顺序表 display public class SeqList { private int [ ] data = null ; //new int[100] private int size = 0 ; public SeqList ( ) { data = new int [ 100 ] ; } public void display ( ) { //依此打印出每个元素 //形如: [1,2,3,4] String result = "[" ; for ( int i = 0 ; i < size ; i ++ ) { result += data [ i ] ; if ( i < size - 1 ) { result += "," ; } } result += "]" ; System . out . println ( result ) ; } } 简单测试: public class Test { public static void main ( String [ ] args ) { SeqList seqList = new SeqList ( ) ; seqList . display ( ) ; } } 2.顺序表中新增元素 add public class SeqList { private int [ ] datas = new int [

线性表及其算法(java实现)

佐手、 提交于 2020-01-11 00:47:37
线性表 线性表是最简单和最常用的一种数据结构,它是有 n 个数据元素(节点)组成的有限序列。其中,数据元素的个数 n 为表的长度,当 n 为零时成为空表,非空的线性表通常记为: (a1,a2,… ,ai-1,ai, ai+1,…,an) 一. 线性表的顺序存储及算法 线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。 1.顺序表的结构定义 public class SeqList { /* 初始空间为10 */ private static final int LIST_SIZE = 10; /* 数组data用来存放元素 */ private int[] data; /* 当前表长,实际存储元素的个数 */ private int length; } 2.插入运算 顺序表的插入运算是指在线性表的第i-1个元素和第i个元素之间插入一个新元素。由于顺序表逻辑上相邻的元素在物理结构上也相邻,其物理存储关系也要发生相应的变化。除非i=n+1,否则必须将原顺序表的第i个元素开始的所有元素分别向后移动1个位置。 /** * 在顺序表list中第i个位置之前插入一个新元素node * @param list 顺序表 * @param i 插入位置 * @param node 新元素 */ public void

Task02 顺序表和链表

点点圈 提交于 2020-01-10 07:19:59
###顺序表和链表 了解顺序表和链表的概念,区别,实现方式,应用,基本操作, 优点,什么时候选用链表,什么时候选用顺序表 实现顺序表。 参照STL 中array, vector, 实现单链表、循环链表、双向链表。 参照STL中list, Forward_list 顺序表:数组实现; 链表:指针 单链表:每个节点只有一个指针,指向下一个节点 循环链表:尾节点指针指向头节点 双链表:每个节点含有两个指针,一个指向前驱,一个指向后继 合并两个有序链表 leetcode 21 Easy 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路:若l1和l2都为空,返回NULL; 若l1和l2有一个为空,返回非空的; 若都不为空,每次从两个链表表头取一个节点比较,将val较小者尾插到新链表中。直到有一个链表为空,再将另一个链表链到新链表后. / ** * Definition for singly - linked list . * struct ListNode { * int val ; * ListNode * next ; * ListNode ( int x ) : val ( x ) , next ( NULL ) { } * } ; * /

数据结构与算法(2)顺序表和链表

旧时模样 提交于 2020-01-09 01:12:41
无需表List的操作如下 add(item):添加一个数据项到列表中,假设item原先不存在于列表中 remove(item):从列表中移除item,列表被修改,item原先应存放在表中 search(item):在列表中查找item,返回bool类型值 isEmpy() 返回列表是否为空 size():返回列表中包含多少数据项 append(item):添加一个数据项到表末尾,假设item原先不存在于列表中 index(item):返回数据项在表中的位置 insert(pos, item):将数据插入到位置pos,假设item原先不存在于列表中,同时原列表具有足够多个数据项,能让item占据位置pos pop():从列表末尾移除数项,假设原列表至少有一个数据项 pop(pos):移除位置为pos的数据项,假设原列表存在位置pos 采用链表实现无序表 数据项存放位置并没有规则,但是如果在数据项之间建立连接指向,就可保持其前后相对位置 第一个和最后一个数据项需要显式表现出来,一个是队首,,一个是队尾,后面再无数据了 链表实现 节点Node: 每个节点至少要包含两个信息:数据项本身,以及指向下一个节点的引用信息。 注意next为None的意义是没有下一个节点了,这点很重要 class Node: def __init__(self,initdata): self.data =

线性表—顺序表

本秂侑毒 提交于 2020-01-08 01:39:11
线性表的定义和特点 同一线性表中的元素必定有相同的特性,即属于统一数据对象,相邻数据元素之间存在着序偶关系。 由n(n>=0)个数据特性相同的的元素构成的有限序列称为 线性表 线性表中元素的个数n(n>=0)定义为线性表的长度,n=0时称为 空表 线性结构示意图: 对于非空的线性表或线性结构,其 特点 是: 存在唯一的一个被称为“第一个”的数据元素; 存在唯一的一个被称为“最后一个”的数据元素; 除第一个之外,结构中的每个元素均只有一个前驱; 除最后一个之外,结构中的每个元素均只有一个后继。 线性表的抽象数据类型定义 ADT 线性表 (list) Data 线性表的数据(Date)对象集合为 {a1,a2,a3,a4…,an},每个元素的类型均为DataType。 其中,除了第一各元素a1以为每个元素有且只有一个直接前驱元素,除了最后一个元素an以外,每个元素有且只有一个直接后继元素。 数据元素之间的关系是一对的关系。 Operation(基本操作) InitList(*L):初始化操作,生成一个空的线性表L。 ListEmpty(L):判断是否为空表,如果是就返回ture,如果不是就返回lfalse。 ClearList(*L):将线性表清空。 GetElem(L,i,*e):将线性表L中的第i个节未知元素值返回给e。 LocateElem(L,e)

算法9--顺序表结构

梦想的初衷 提交于 2019-12-28 04:28:28
SeqList.h #include <stdio.h> #include <string.h> #define MAXSIZE 5 typedef struct { char key[15]; char name[20]; int age; }DATA; typedef struct SeqList { DATA ListData[MAXSIZE+1]; int ListLen; }SeqListType; void SeqListInit(SeqListType *SL); int SeqListLength(SeqListType *SL); int SeqListAdd(SeqListType *SL,DATA data); int SeqListInsert(SeqListType *SL,int n,DATA data); int SeqListDelete(SeqListType *SL,int n); DATA *SeqListFindByNum(SeqListType *SL,int n); int SeqListFindByCont(SeqListType *SL,char *key); int SeqListAll(SeqListType *SL); SeqList.c #include "SeqList.h" #include "stdio.h" void

顺序表的实现

淺唱寂寞╮ 提交于 2019-12-27 04:18:30
顺序表的实现 头文件 # pragma once # include <stdio.h> # include <assert.h> # include <stdlib.h> typedef int SLDataType ; typedef struct SeqList { SLDataType * array ; // 指向动态开辟的数组 size_t size ; // 有效数据个数 size_t capicity ; // 容量空间的大小 } SeqList ; // 基本增删查改接口 // 顺序表初始化 void SeqListInit ( SeqList * psl , size_t capacity ) ; // 顺序表销毁 void SeqListDestory ( SeqList * psl ) ; // 顺序表打印 void SeqListPrint ( SeqList * psl ) ; // 检查空间,如果满了,进行增容 void CheckCapacity ( SeqList * psl ) ; //顺序表尾插 void SeqListPushBack ( SeqList * psl , SLDataType x ) ; //顺序表尾删 void SeqListPopBack ( SeqList * psl ) ; //顺序表头插 void