顺序表

八种常用排序算法 - C语言

狂风中的少年 提交于 2019-12-26 22:58:51
文章目录 数据结构之排序算法 一、 实验目的 二、 实验内容 三、 实验工具 四、 实验代码 五、 实验结果 六、 总结与思考 数据结构之排序算法 一、 实验目的 了解排序的相关概念,理解各种排序方法的思想与排序过程,掌握各种排序方法的时间复杂度分析,实现各种排序算法。 二、 实验内容 通过编写程序,实现希尔排序、快速排序、堆排序和归并排序等算法。具体步骤如下: 在主函数中输入线性序列和关键字; 创建实现希尔排序、快速排序、堆排序和归并排序的子函数; 在主函数中,通过switch语句调用相关函数,实现排序。 三、 实验工具 Dev - C++ 四、 实验代码 //Authors:xiaobei # include <stdio.h> # include <stdlib.h> # define MAXSIZE 20 typedef int KeyType ; typedef char InfoType ; typedef struct { KeyType key ; InfoType otherinfo ; } RedType ; typedef struct { RedType r [ MAXSIZE + 1 ] ; int length ; } SqList ; //函数创建顺序表 int CreateSq ( SqList & L ) { int i , length ;

PTA实验作业-01

眉间皱痕 提交于 2019-12-26 18:51:51
一、PTA实验作业 本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求: 顺序表选择一题(6-2,6-3,7-1选一题),代码必须用顺序结构抽象数据类型封装 单链表选择一题(6-1不能选) 有序表选择一题 1.题目1:题目名称 顺序表:6-3 jmu-ds- 顺序表删除重复元素(25 分) 单链表:6-3 jmu-ds-链表倒数第m个数(20 分) 有序表:7-1 两个有序链表序列的合并(20 分) 2. 设计思路(伪代码或流程图) 顺序表:6-3 jmu-ds- 顺序表删除重复元素(25 分) ##根据题目给出条件 #创建顺序表 CreateSqList(L,a,n) 定义变量i用以计数 //整形变量 for i<-0 to n by 1 a[i]->L end for //结束for循环 n->L的长度 end #输出顺序表 DispSqList(L) 定义变量i用以计数 //整形变量 for i<-0 to L->length by 1 输出L->data[i] end for //结束for循环 if i<L->length-1 则 输出’空格” end #删除重复元素 DelSameNode(L) 定义变量i,j,k用以计数 //整形变量 for i<-0 to L->length by 1 //for1 for j<-i+1 to L-

数据结构:顺序表

偶尔善良 提交于 2019-12-26 10:53:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> /* * this c file is a implementation of linear list * author: John Woods * date: 2015/5/3 * exclaim: anyone can use the file to any purpose */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define INIT_LEN 20 #define INCREMENT_SIZE 10 #define BOOL int /* define boolean type */ #define TRUE 1 #define FALSE 0 /* linear list structure */ typedef struct LinearList { int * LL; int Length; int MaxLength; } * LinearList; /* menu */ void menu(); void insert(LinearList myLL); void delete(LinearList myLL); void prior(LinearList myLL); void next(LinearList

哈希表的特征和原理

老子叫甜甜 提交于 2019-12-25 23:54:38
哈希表也叫散列表,是一种神奇的结构,最大的特点就是快。它的结构有很多种,最流行、最容易理解的是:顺序表+链表的结构。主结构是长度可以动态变化的顺序表,每个顺序表的节点可以单独引出一个链表。哈希表的原理可以从以下三点阐述。 添加数据原理: 1)、计算哈希码,调用hashCode()方法,结果是一个int值,整数的哈希码取自身即可 2)、根据哈希码计算存储位置(数组的索引)【y = k(x) (除留取余法)存入哈希表】 3)、将数据存入指定位置,如果已经有元素存在,就是出现了冲突,需要沿着链表比较,有重复的元素,不存储。没有,就存储。 结论:添加快。时间复杂度O(1);无序。 查询数据的原理: 和添加过程一样,还是三步搞定。结论:查询快。 总结:哈希表的神奇之处在于按照内容查询,理想情况下可以达到数组索引查询的时间复杂度O(1)。核心在于其查询不是基于比较的,而是基于计算的。当存在冲突时,会降低效率。 如何减少冲突: 1)装填因子:哈希表的长度和表中的记录数的比例。超过装填因子就要扩容。不然冲突的概率会大大提高,从而影响性能。 2)哈希函数的选择 直接定址法 平方取中发 折叠法 除留取余法等 3)处理冲突的方法 链地址法 开放地址法 再散列法 建立一个公共溢出区 hashCode和equals()在哈希表添加查询中的作用: 1)hashCode():计算哈希码,是一个整数

你需要打好线性表的基础——数据结构

杀马特。学长 韩版系。学妹 提交于 2019-12-25 11:49:10
引言: 我们都知道,盖房子需要坚实的基础,作为一个学完数据结构的弱鸡,我真切的感到了基础的力量。排开那些基本的概念,那些算法计算的表达。我们之后的大部分操作,都是 建立在线性表的基础上 ,所以我们要学会利用这两大工具—— 顺序表和链表 。只有掌握了它们,之后所有的算法才可以去谈实现,不然都是纸上谈兵(当然啦,会算法也很重要)。那么我们一起来学习吧,所有的讲解都是按照: 初始化、取值、查找、插入、删除(创建---这里链表才有)这个线性方式 。这里可以给出一个目录,方便大家进行阅读。 目录 一、顺序表 二、单链表 三、循环链表和双向链表简单介绍 一、顺序表 1.初始化 【算法步骤】 为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址。 将表的当前长度设为0。 【算法描述】 void InitList(SqList &L) {//构造一个空的顺序表L L.elem = new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间 if(!L.elem) exit(OVERFLOW);//存储分配失败退出 L.length = 0;//空表长度为0 } 2.取值 【算法步骤】 判断指定的位置序号i值是否合理(1<=i<=L.length),若不合理,则返回ERROE。 若i值合理,则将第i个数据元素L.elem[i-1]赋给参数e

第二章:1.线性表 -- 线性表的顺序表示及实现

浪尽此生 提交于 2019-12-25 00:49:50
线性结构的特点是在数据的非空有限集中: 1)存在唯一一个被称为“第一个”的数据元素 2)存在唯一一个被称为“最后一个”的数据元素 3)除了第一个元素之外,集合中每个数据元素均只有一个前驱 4)除最后一个元素外,集合中每个数据元素均只有一个后继 1.线性表的类型定义 2.线性表的顺序表示和实现 1.线性表的类型定义   线性表(Linear_List)是最常用且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列。至于每个数据元素可以是一个数,一个符号,也可以是一页书,甚至更复杂的信息。     字符表:(A,B,C,D......Z)是一个线性表     在稍复杂的线性表中 ,一个数据元素可以由若干数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件。     例如,一个学校学生健康情况登记表,表中每个学生的情况为一个记录,它由姓名、学号、性别、年龄、健康状况等数据项组成。     综上所述,线性表中的数据元素各式各样,但同一线性表中的元素必定具有相同的特性,即同属一个数据对象,相邻数据元素之间存在着序偶关系。     若将线性表记为:             (a1, a2, .....ai.....,an)     则 n定义为线性表的长度,n=0时称为空表。在非空表中的每个数据元素都有一个确定的位置

线性表

江枫思渺然 提交于 2019-12-24 19:06:18
阅读目录 一、线性表类型定义 二、顺序表 三、链表 四、总结 一、线性表类型定义 1.定义 线性表是n个数据元素的有限序列 2.基本操作 InitList(&L) #构造一个空的线性表L DestroyList(&L) #销毁线性表L ClearList(&L) #将L重置为空表 ListLength(L) #返回L中数据元素个数 GetItem(L,i,&e) #用e返回L中第i个数据元素的值 LocateElem(L,e,compare()) #返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据远古三不存在,则返回值为0 ListInsert(&L,i,e) #在L中第i个位置之前插入新的数据元素e,L的长度加1 ListDelete(&L,i,&e) #删除L的dii个数据元素,并用e返回其值,L的长度减1 二、顺序表 1.定义 线性表的顺序存储结构称为顺序表。 假设线性表的每个元素需占用l个存储单元,一般来说,线性表的第i个数据元素a i的存储位置为LOC(a i) = LOC(a 1) + (i-1)*l 2.实现 由于高级程序设计语言中的数组类型也有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。在此,由于线性表的长度可变,且所需最大存储空间随问题不同而不同,则在C语言中可用动态分配的一维数组 顺序开始为为1

PTA6-2 顺序表操作集 (20分)

孤人 提交于 2019-12-24 06:29:18
PTA6-2 顺序表操作集 (20分) 函数接口定义: 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(

《数据结构与算法》-2-线性表

我的梦境 提交于 2019-12-23 13:24:02
目录 1. 线性表的定义和基本操作 1.1 线性表的定义 1.2 线性表的基本操作 2. 线性表的顺序表示 2.1 顺序表的定义 2.2顺序表上基本操作的实现 3. 线性表的链式表示 3.1 单链表的定义 3.2 单链表基本操作的实现 3.3 双链表 3.4 循环链表 3.5 静态链表 4. 顺序表与链表的比较 5. 如何选择存储结构   该系列博客的目的是为了学习一遍数据结构中常用的概念以及常用的算法,为笔试准备;主要学习过程参考王道的《2018年-数据结构-考研复习指导》; 已总结章节: 《数据结构与算法》-1-绪论 《数据结构与算法》-2-线性表   上篇博客 《数据结构与算法》-1-绪论 中说到数据结构的三要素:逻辑结构、存储结构、数据的运算;其中,逻辑结构表示的是数据元素之间的关系,逻辑结构根据数据元素之间关系的不同,分成了线性结构与非线性结构,这里我们将要介绍的就是线性结构中的线性表,并根据线性表在计算机中存储结构的不同,分别介绍了:顺序存储(顺序表)、链式存储(链表);   这篇主要介绍的内容有: 线性表的定义以及基本操作 ; 线性表的顺序存储 ; 线性表的链式存储 ; 顺序表与链表的比较 ;   其知识框架如下图所示: 1. 线性表的定义和基本操作   这一节主要介绍线性表,主要内容包括:线性表的定义及基本操作; 1.1 线性表的定义   定义: 线性表是具有 相同

线性表、顺序存储、链式存储的关系

放肆的年华 提交于 2019-12-23 06:15:34
什么是线性表: 线性表是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。 线性表是一种 逻辑结构 顺序存储和链式存储是 存储结构 顺序表和链表两者比较: 1、顺序表可以顺序存取/随机存取,链表只能顺序存取 2、顺序表存储内容在物理储存地址上也相邻,链表通过指针指向,故链表不一定 3、顺序表存取速度慢,查询速度快;链表存取速度快,查询速度慢。 来源: CSDN 作者: 好姑娘向暖而生 链接: https://blog.csdn.net/u010572412/article/details/103653052