顺序表

顺序表

匿名 (未验证) 提交于 2019-12-02 23:35:02
今天我学习了顺序表,学习了顺序表怎么插入,删除,查找一个元素。顺序表是数据逻辑有连续性,物理存储上也有连续性。看了插入,删除等的时间复杂度。 在顺序表的头部和中间插入的话时间复杂度为O(n),尾部插入的话时间复杂度平均为O(1); 在顺序表的头部和中间删除的话时间复杂度为O(n),尾部删除的话时间复杂度为O(1); 查找一个元素的复杂度为O(n)。 下来准备学习链表的内容。 转载请标明出处: 顺序表 文章来源: https://blog.51cto.com/14232274/2400101

顺序表算法实现

匿名 (未验证) 提交于 2019-12-02 23:26:52
初始化顺序表 void InitList(SqList * &L) { L = (SqList *)malloc(sizeof(SqList)); if (!L) { exit(OVERFLOW); } L->length = 0; } 销毁顺序表 void Destroy(SqList * &L) { free(L); } 判断顺序表是否为空 Status ListEmpty(SqList * &L) { if (L->length == 0) return TRUE; else return FALSE; } 求顺序表表长 int ListLength(SqList * L) { return L->length; } 打印顺序表 void DispList(SqList * L) { printf("打印\n"); int i; if (ListEmpty(L)) return; for (i = 0; i < L->length; i++) { printf("%d\t", L->data[i]); } printf("\n"); } 获取顺序表指定元素 Status GetElem(SqList * L, int i, ElemType &e) { if (i < 1 || i > L->length) return FALSE; e = L->data[i - 1];

顺序表的基本操作――定长顺序表

匿名 (未验证) 提交于 2019-12-02 23:03:14
线性表的顺序存储结构:指的是用用一段地址连续的存储单元依次存储线性表的数据元素。 线性表的顺序结构示意图如下: 顺序表(SeqList)的基本特征为:元素在内部存储时是一个接一个在存储单元中按顺序存储的,所以只要知道"起始元素的存储地址"--称为顺序表的基地址以及顺序表中任何元素的位置(即它是第几个元素),就能直接定位到该元素的地址,从而直接访问到该元素的值。 顺序表的优点: 可以快速地存取表中任一位置的元素。 顺序表的缺点: 1、插入和删除操作需要移动大量元素; 2、当线性表长度变化较大时,难以确定存储空间的容量; 顺序表分为两种: ①定长顺序表 ②不定长顺序表(可扩容) 顺序存储结构: { }SeqList,*PSeqList; 数据长度与线性表长度的区别 数组长度:指存放线性表的存储空间的长度,存储分配后一般不变。(分配的数组空间要大于当前线性表的长度) 线性表长度:指线性表中数据元素的个数,随着线性表插入和删除操作的进行,量改变。 顺序表的插入: 1、判断插入位置是否合理; 2、判断线性表的长度大于等于数组长度; 3、从最后一个元素开始遍历到第i个位置,分别将它们都向后移动一个位置; 4、将插入的元素插入位置i处; 5、表长+1; 顺序表的删除: 1、判断删除位置是否合理; 2、取出删除值; 3、从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置; 4

第二章作业题1-顺序表

匿名 (未验证) 提交于 2019-12-02 22:56:40
版权声明:沃斯里德小浩浩啊 https://blog.csdn.net/Healer66/article/details/82655533 1-1 1-2 若某线性表最常用的操作是 存取任一指定序号的元素和在最后进行插入和删除运算 1-3 1-4 1-5 1-6 1-7 F 2-1 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:(1分) 2-2 在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:(2分) 访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N) 在第i个结点后插入一个新结点(1≤i≤N) 删除第i个结点(1≤i≤N) 将N个结点从小到大排序 2-3 双链表 单循环链表 带头结点的双循环链表 顺序表 2-4 顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。(2分) 100 105 108 110 2-5 随机存取的存储结构 顺序存取的存储结构 索引存取的存储结构 散列存取的存储结构 2-6 表的长度 元素的类型 元素的存放顺序 元素中各字段的类型 2-7 i n-i-1 n-i n-i+1 2-8 便于插入和删除操作 便于随机存取 可以动态地分配存储空间 不需要占用一片相邻的存储空间 2-9 n-i n+i n-i-1 n-i+1 2-10 n-i n-i+1 n-i-1 i 2-11 n/2

顺序表考研习题2

匿名 (未验证) 提交于 2019-12-02 22:56:40
1 从有序顺序表中删除其值在给定值s到t之间(s<t)的所有元素,若输入元素不合法或为空则返回错误信息并退出运行 boot delect(sqlist &L,elemtype s,elemtype t) { if(s>t||L.length==0) return 0; for(i=0;i<L.length&&L.data[i]>s;i++) //查找大于等于s的元素 if(i==L.length) return 0; for(j=i;j<L.length&&L.data[j]>=t;j++) //查找大于t的元素 for( ;j<L.length;j++,i++)//把大于t的元素移动到删除的元素上 L.data[i]=L.data[j]; L.length=i+1;//最后的表长,即最后元素的个数 return 1; } 文章来源: 顺序表考研习题2

Day1:顺序表应用5:有序顺序表归并

匿名 (未验证) 提交于 2019-12-02 22:56:40
Problem Description 已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。 Input 第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数; 第二行输入m个有序的整数,即为表A的每一个元素; 第三行输入n个有序的整数,即为表B的每一个元素; Output Sample Input 5 3 1 3 5 6 9 2 4 10 Sample Output 1 2 3 4 5 6 9 10 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define max 10010 typedef int element; typedef struct { element *elem; int length; }list; void creat(list &L) { L.elem = (element *)malloc(sizeof(element) * max); L.length = 0; } void input(list &L, int n) { int i; L.length = n; for(i=0; i<n; i++) { scanf("%d",

Java 3:顺序表的操作

匿名 (未验证) 提交于 2019-12-02 21:40:30
顺序表常见操作有插入、删除、查找、修改。 一、插入: 1.插入有头插、尾插、任意位置插入。在插入时要注意下标的取值在顺序表长度范围内。所以最好在插入之前进行扩容操作。 2.在头插时要注意先将原数组的元素从后往前依次向后移动。因为如果从前往后开始移动的话,会造成后一个元素被前一个元素覆盖,而丢失数据且造成重复。arr[i+1]=arr[i],注意此处i的意思是要移动的元素的下标。 3.任意位置插入与头插类似,从后往前(要插入的位置元素下标)依次向后移动,再将数据插入 二.删除 1.删除有头删、尾删、任意位置删除,要注意删除前,原顺序表是否为空的异常情况。 2.头删与头插相反,是从前往后依次向前移动,即后一个元素arr[i+1]覆盖前一个元素arr[i].arr[i]=arr[i+1] 3.不论查找还是删除,在确定循环语句的初始值和条件时都要仔细思考可取范围 三.查找和修改 查找和修改要注意目标位置的下标不能越界 四.扩容 在java语言中,扩容一般扩为原来的1.5倍,是一种习惯的规范,不是死规则。 最后,附上完整代码,包括初始化、插入、删除、查找、修改、扩容、删除顺序表的相同元素。 import java.util.Arrays; public class SeqList1{ private int[] array; private int size; //1.初始化,构造函数

稀疏矩阵——三元组顺序表

心不动则不痛 提交于 2019-12-02 16:32:46
目录 稀疏矩阵 矩阵的转置 矩阵压缩存储-三元组顺序表 稀疏矩阵的转置 第一种:以列序为主序的转置 第二种:快速转置 完整代码: 稀疏矩阵 假设m n的矩阵中,有t的非零元,令s=t/m n,当,s<=0.05时,称此矩阵为稀疏矩阵,简单理解就是非零元特别少的矩阵 //一般矩阵a 1 2 3 a= 4 5 6 7 8 9 //稀疏矩阵s 0 0 0 0 0 0 2 0 0 5 s= 0 0 3 0 0 0 0 0 0 4 矩阵的转置 一个m * n的矩阵转置后变为 n * m的矩阵 //3*2的矩阵-转置前 1 2 4 5 7 8 //转置后变为2*3 1 4 7 2 5 8 转置后的矩阵每个元素的下表与原来的下表刚好相反,例如上面4转置前的下标为(2,1),转置后变为(1,2); 矩阵压缩存储-三元组顺序表 之所以引入三元组顺序表,是因为,对于稀疏矩阵而言,用传统的存储方法会造成存储空间的浪费 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 M= 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 //上面矩阵用三元组表示 i j v 1 2 12 1 3 9 3 1 -3 3 6 14 4 3 24 5 2 18 6 1 15 6 4 -7 typedef struct { int i,j; /

顺序表常见几种操作

杀马特。学长 韩版系。学妹 提交于 2019-12-02 15:13:36
顺序表常见几种操作: #include"stdio.h" #include"stdlib.h" #include"time.h" #define ture 100 #define false 101 #define maxsize 20 typedef struct node { int data[maxsize]; int length; }seqlist, *pseqlist; pseqlist init_list() //初始化顺序表,函数返回类型为pseqlist类型。 { pseqlist p; p = (pseqlist)malloc(sizeof(seqlist)); if(p) p->length = 0; return p; } int length_list(pseqlist p) //求顺序表的长度 { return (p->length); } /* 顺序表的检索有两种方法, 1:通过给定的一个数,然后在顺序表里遍历去匹配,如果有,输出位置,没有,返回false 2:通过给定的位置,来返回对应位置的数值 */ int location_list(pseqlist p, int x) // 参数:顺序表,要比对的数 { int i; for(i = 0; i < p->length; i++) { if(p->data[i] == x) { return i

数据结构笔记——线性表抽象数据类型、顺序表

旧巷老猫 提交于 2019-12-02 14:51:48
InitList( *List )            初始化线性表,创建一个空的线性表List InsertElement( *List,index ,elem )    在线性表List的下标index中插入elem DeletElement( *List, index, *elem)    删除线性表中第i个元素,并返回删除元素的指针 GetLength( *List )          获得线性表的长度 顺序表: 1、 定义线性表的最大存储空间 2、线性表里需要有统一类型的元素 typed int ElementType; 相当于给int起了个别名叫ElementType typedef struct {     int id;     char *name; }ElementType; 3、定义顺序表结构 typedef struct {     ElementType datas [MAX_SIZE]; 元素集合,有限个     int length; 长度 } 顺序存储结构 a1  a2  a3.....位置从 1 开始 0   1   2.....下标 ,从 0 开始 2019.10.28 顺序表插入算法 向顺序表中的index下标处插入一个元素 1、验证插入后的元素空间是否超过MAX_SIZE 2、index 的值是否合法 [ 0 , MAX_SIZE - 1