顺序表

第二次作业--线性表

大憨熊 提交于 2020-02-25 11:47:27
一、PTA实验作业 本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求: 顺序表选择一题(6-2,6-3,7-1选一题),代码必须用顺序结构抽象数据类型封装 单链表选择一题(6-1不能选) 有序表选择一题 题目: 6-3 jmu-ds- 顺序表删除重复元素(25 分) 设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变 设计思路: int i=0,j=0,k; 先定义三个计数下标 for(i=0;i<L->length;i++){ j=i+1; 让j始终比i大1,才能让两个相邻的数比较 while(j<L->length){ if(L->data[i]==L->data[j]){ 判断相邻两个数是否相等 for(k=j;k<L->length-1;k++){ L->data[k]=L->data[k+1]; 如果相等让下标为J的数等与j+1然后在与下标为i的数相比 } L->length--; 如果有相等的就表长减一 } else j++; } } 代码截图: PTA测试结果 ; 6-3 jmu-ds-链表倒数第m个数(20 分) 已知一个带有表头节点的单链表,查找链表中倒数第m个位置上的节点 设计思路: int Find(LinkList L, int m ) { LinkList p; p=L;

顺序表的相关概念及操作(java)代码-学习笔记20.2.19

最后都变了- 提交于 2020-02-20 09:06:00
线性表的顺序存储 顺序表的定义: 所谓顺序表,就是顺序存储的线性表。顺序表是用一组地址连续的存储单元依次存放线性表中各个数据元素的存储结构。 顺序表的特点: 1)在线性表中逻辑上相邻的数据元素,在屋里存储位置上也是相邻的。 2)存储的密度高,但需要预先分配足够应用的存储空间,这可能将会造成存储空间的浪费。 3)便于随机存取。 4)不便于插入和删除操作,这是因为在顺序表上插入和删除操作会引起大量数据元素的移动。 顺序表的一些操作如下: 接口部分代码展示: package 顺序表 ; public interface Ilist { public void clear ( ) ; public boolean isEmpty ( ) ; public int length ( ) ; public Object get ( int i ) throws Exception ; public void insert ( int i , Object x ) throws Exception ; public void remove ( int i ) throws Exception ; public int indexOf ( Object x ) ; public void display ( ) ; } 实现类展示如下: package 顺序表 ; import java .

顺序表与链表

主宰稳场 提交于 2020-02-11 21:22:31
顺序表 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般采用 数组存储 。在数组上完成数据的增删查改。 顺序表一般可以分为: 静态顺序表:使用定长数组存储 #define N 100 typedef int SLDataType; typedef struct Seqlist { SLDataType* a[N]; //定长数组 size_t size; // 有效数据的个数 }SeqList; 动态顺序表:使用动态开辟的数组存储 typedef int SLDataType; //定义数据类型方便更改 typedef struct SeqList { SLDataType* a; //指向动态开辟的数组 size_t size; //有效数据个数 size_t capacity; //容量大小 }SeqList; 动态顺序表增删查改等实现: https://github.com/Ellyn-jia/Data-structure/tree/master/SeqList/SeqList 链表 链表是一种 物理存储结构上非连续、非顺序 的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的。 链表的结构是多样的: 单向、双向 带头指针、不带头指针 单链表、循环单链表 常见的两种链表结构: 无头指针单向不循环链表:结构简单,在考察中出现较多 实现

6-16 顺序表的查找操作 (10分)

别说谁变了你拦得住时间么 提交于 2020-02-07 12:21:51
本题要求实现一个函数,要求从顺序表中查找指定元素,并返回第一个查找成功的元素在表中的位置序号,若查找失败,则返回0; 函数接口定义: int LocateElem(SqList L,ElemType e); 其中SqList结构定义如下: typedef struct{ ElemType *elem; int length; }SqList; 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 5 typedef int ElemType; typedef struct{ ElemType *elem; int length; }SqList; void InitList(SqList &L);/*细节在此不表*/ int LocateElem(SqList L,ElemType e); int main() { SqList L; InitList(L); ElemType e; int p; scanf("%d",&e); p=LocateElem(L,e); printf("The position of %d in SequenceList L is %d.",e,p); return 0; } /* 请在这里填写答案 */ 输入格式: 输入数据有1行,首先给出以-1结束的顺序表元素值

JAVA数据结构——单链表

一个人想着一个人 提交于 2020-02-07 07:21:30
链表: 一、 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性: 1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间。并把原有的数据元素复制进新的存储空间。 2. 因为顺序表要求数据的存储位置不仅是逻辑上相邻而且物理存储上也要相邻,所以当对数据进行增删操作的时候则会引起平均一半的数据元素移动。 综上所述:适合静态存储、对数据元素很少增删操作,则优先选择顺序表,对需要对数据频繁执行插入和删除操作,则选择动态的线性表-链表,链式存储不需要逻辑上相邻的元 素物理上也相邻,所以链表也带来了一定的局限性,失去了随机存取的特点。所以根据需求进行选择。 二、使用JAVA实现单链表: 接口同顺序表: [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package com.usts.edu.list; /** * Created by Guanzhong Hu * Date :2019/12/27 * Description : 线性表 * Version :1.0 */ public interface Ilist { //

【数据结构】---线性表

℡╲_俬逩灬. 提交于 2020-02-05 19:57:44
目录 线性表的定义和特点 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1. 初始化 2. 取值 3. 查找 4. 插入 5. 删除 线性表的定义和特点 线性表属于线性结构。 线性结构的基本特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,其他每个元素都有一个前驱和后继。 同一线性表中的元素必定具有相同的特性,即属于同一数据对象,相邻数据元素之间存在着序偶关系。 由 \(n (n \geq 0)\) 个数据特性相同的元素构成的有限序列称为 线性表 。线性表中元素的个数 \(n (n \geq 0)\) 定义为线性表的长度, \(n = 0\) 时称为空表。 线性表的顺序表示和实现 线性表的顺序存储表示 线性表的顺序表示是指用一组地址连续的存储单元一次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构,称这种存储结构的线性表为**顺序表 (Sequential List)。逻辑上相邻的元素,物理次序也是相邻的。 线性表的第一个数据元素的存储位置,通常称作线性表的起始位置或 基地址 。线性表的顺序存储结构是一种 随机存取 的存储结构。 通常使用数组来描述数据结构中的顺序存储结构,由于线性表的长度可变,在C语言中可用动态分配的一维数组表示线性表,描述如下: // ----------顺序表的存储结构---------- #define MAXSIZE

数据结构——线性表(简介)

岁酱吖の 提交于 2020-02-04 08:16:38
线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。 线性表主要由顺序表示或链式表示。在实际应用中,常以栈、队列、字符串等特殊形式使用。( Ps. 栈,队列等会在之后的博客中连载,类别属于数据结构,可以访问一下小编的主页查找呦 ) 线性表采用顺序存储的方式存储就称之为顺序表,顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 线性表采用指针链接的方式存储就称之为链表。 详细讲解推荐几个网址: 线性表存储结构 、 线性表百度百科 来源: CSDN 作者: 青空灬晓帆 链接: https://blog.csdn.net/cutepandaxf/article/details/104080960

顺序表操作集

天涯浪子 提交于 2020-02-04 06:51:49
本题要求实现顺序表的操作集。 函数接口定义: List MakeEmpty ( ) ; Position Find ( List L , ElementType X ) ; bool Insert ( List L , ElementType X , Position P ) ; bool Delete ( List L , Position P ) ; 其中List结构定义如下: typedef int Position ; typedef struct LNode * List ; struct LNode { ElementType Data [ MAXSIZE ] ; Position Last ; /* 保存线性表中最后一个元素的位置 */ } ; 各个操作函数的定义为: List MakeEmpty():创建并返回一个空的线性表; Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR; bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false; bool Delete( List L,

c++线性表和数组的区别

强颜欢笑 提交于 2020-02-03 21:51:48
在传统C语言程序中,描述顺序表的存储表示有两种方式:静态方式、动态方式 顺序表的静态存储表示: #define maxSize 100 typedefintT; typedefstruct{ T data[maxSize]; intn; }SeqList; 存储数组的大小和空间已经固定分配,一旦数据空间占满,再加入新的数据结构就会产生溢出,此时存储空间不能扩产,会导致程序停止工作。 顺序表的动态存储表示: typedefintT; typedefstruct{ T *data; intmaxSize , n; }SeqList; 存储数组的空间是在程序执行过程中通过动态存储分配的语句分配的,一旦数据空间占满,可以另外再分配一块更大的存储空间,用以代换原来的存储空间。同时将表示数组大小的常量maxSize放在顺序表的结构内定义,可以动态的记录扩产后的数组空间大小。 数组定义的方法: 注意:new操作的结果有类型(第一个元素的地址),只能赋值给同类型指针变量 int i[] ={1,2,3,4}; int *a = new int[5]; delete[] a; 二维数组: 大部分语言按照行优先把二维数组存放在一维数组中 int a[2][3]={{1,2},{3,4}}; //a为2列3行,第三行元素为0 int** Copy = new int*[m]; //Copy为m行n列

数据结构学习(一)

孤街醉人 提交于 2020-02-02 18:22:26
数据结构:数据的存储方式,specially,复杂的数据要关注数据元素之间的关系用合适的方式来存储。 数据结构大致分类:线性表(顺序表、链表、栈、队列),树结构(普通树、二叉树、线索二叉树),图结构。 线性表结构存储的数据往往是可以依次排列的。线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。 顺序表结构的底层实现借助的就是数组。可简单理解成数组。需要提前申请一定大小的存储空间,这块存储空间的物理地址是连续的。 * 链表则完全不同,使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。为了给各个数据块建立“依次排列”的关系,链表给各数据块增设一个指针,每个数据块的指针都指向下一个数据块(最后一个数据块的指针指向 NULL)组成单元由指针和数据块两部分组成。 栈和队列是特殊的线性表,栈元素遵循先入后出的原则,在栈的同一端进行。队列则是先进先出原则,在队里两段进行。 数存储结构具有一对多的特点。 图存储结构具有多对多的特点。 算法是解决某个问题的想法、思路;而程序是在心中有算法的前提下编写出来的可以运行的代码。 算法好的标准:首先,能准确解决问题。其次,能在多种情况下不崩溃。最后,时间效率和空间效率高。 算法的时间复杂度,主要看算法中使用到的循环结构中代码循环的次数(称为“频度”)。次数越少