有序线性表是什么嘚顺序存储又称为顺序表
它用一组地址连续的存储单元,依次存储有序线性表是什么中的数据元素从而使得逻辑上相邻的两个元素在粅理位置上也相邻。
第 1 个元素存储在有序线性表是什么的起始位置第 i 个元素的存储位置后面紧接着存储的是第 i+1 个元素。
因此顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。
顺序表结构体的定义:typedef int ElemType即是定义数据元素类型,可以适应更多类型;
typedef struct的内容就是定义了定义順序表类型只是定义了一个类型,而不是变量;
顺序表结构的定义对于在代码的后续操作起着关键性作用,所以在结构体的定义中要仔细
顺序表插入、删除的代码操作:顺序表的插入和删除操作,在顺序表开始寻找到相对性的数值
就开始执行操作。删除操作针对于區间删除来说先从第一个for循环开始执行,定义三个变量
找到重复元素就开始删除操作。顺序表的插入删除都是要遍历链表找到相对應的元素进行操作。
链表结构体嘚定义:对于单链表而言先定义的一个结构体用来描述单链表的结点。从这个结构
定义中我们知道,结点由存放数据元素的数据域存放后继结点地址的指针域组成对于ElemType
就是定义一个结构体成员,struct Node* next的语句对于链表的结点指向的操作其中每个数据
分为两部分,一部分是數据存储的位置称为数据域,另外指针所存储的地方称为指针域。
头插法建链表操作:从一个空表开始重复读入数据,生成新结点将读入数据存放到新结点的数据域中,
然后将新结点插入到当前链表的表头结点之后直至读入结束标志为止。首先对于链表L申请空间再
尾插法建链表:将新结点插到当前链表的表尾上,增加一个尾指针使之指向当前链表的表尾。
尾插法建链表比从头插法建链表操作哆一个尾结点tail用tail->next尾部插入数据
有序单链表数据插入,删除:所谓有序表其中所有元素以递增或者递减方式有序排列;有序表
包含于有序线性表是什么;有序表和有序线性表是什么中元素之间的逻辑关系相同,其区别是运算实现的不同
i表示LA的下标,j表示LB的下标 查看LA或者LB是否扫描完毕没扫描玩把剩余元素复制插入LC
双链表:双链表每个节点有2个指针域。一个指向后续节点一个指向前驱结点。
循环链表:循环链表是另一种形式的链式存储结构形式將表中尾结点的指针域改为
指向表头结点,整个链表形成一个环由此从表中任意节点出发均可以找到链表中其他
节点。循环双链表与非循环相比链表中没有空指针域;p所指结点为尾结点的条件:
表中元素具有逻辑上的顺序性,在序列中各元素排序囿其先后次序
表中元素都是数据元素,每一个元素都是单个元素
表中元素的数据类型相同,这意味着每一个元素占有相同大小的存储涳间
表中元素具有抽象性。即仅讨论元素间的逻辑关系不考虑元素究竟表示什么内容。
有序线性表是什么是一种逻辑结构表示元素の间一对一的相邻关系。
顺序表和链表是指存储结构两者属于不同层面的概念
Length(L):求表长。返回有序线性表是什么 L 的长度即 L 中数据元素的个数。
LocateElem(L,e):按值查找操作在表 L 中査找具有给定关键字值的元素。
GetElem(L,i):按位査找操作获取表 L 中第 i 个位置的元素嘚值。
PrintList(L):输出操作按前后顺序输出有序线性表是什么 L 的所有元素值。
DestroyList(&L):销毁操作销毁有序线性表是什么,并释放有序线性表是什么 L 所占用的内存空间
有序线性表是什么因存储結构的不同分为顺序表和链表。顺序表适合于查找、修改第i个结点的值(其时间复杂度为O(1))
但插入或者删除结点就要每次都移动數组,比较麻烦链表适合用于插入删除某个结点,比较灵活也比较绕。
在打pta的过程中由于大多数都没有注意到一些基础函数,在打編程题的时候就一直各种错误尤其是初始化链表,
一直出现段错误在链表中还要注意不能出现野指针,所以要提高正确率最好要学會背代码....
Q1:最开始的时候出现段错误
A1:没有对L3进行初始化
Q2:中间部分出现部分正确
A2:因为在复制上一段代码的时候,在重复数据出现时候忘记p=p->next
Q1:编译错误从VS转移代码的时候最后漏掉}
Q2:一开始的运行超时是while里面忘记让用来遍历的pre指针往后移了导致while出不来,就运荇超时了
Q3:编译错误就是承接上一个错误,添加了pre=pre->next变量时ptr
Q3:部分正确,就是答案的格式错误
借助辅助数組v_temp存储原表的前p个元素并把原顺序表中p之后的元素顺序前移,
然后将v_temp中暂存的p个数的元素依次放回到原顺序表的后续单元
空间复杂度為O (p)
定义data的数组空间大小,链表长度
for(原顺序表中p之后的元素顺序前移)
v_temp中暂存的p个数的元素依次放回到原顺序表的后续单元;
1.使用静态分配的方式创建一维数组:数组的大小和空间固定,一旦占满再加叺新的数据会导致程序崩溃
2.运用辅助数组v_temp来存储元素再进行前移再放回,思路很清晰
2.若v1.data[mid1] < v2.data[mid2]2则序列1中比mid1还要小数必不可能为所求中位数,故舍弃序列1中较小的一半;同理这时也要舍弃序列2中较大的一半。
3.若v1.data[mid1] > v2.data[mid2], 则舍弃序列1中大于mid1的数同时也要舍弃序列2中较小的一半,直到逻辑上的序列只含一个元素时,较小者即为所求中位数
5.空间复杂度:O(1)。
定义data的数组空间大小链表长度
num结点始终指向序列中的第一个元素的下标
定义end结点始终指向序列中的最后一个元素的下標
while(还没找到最后一个元素循环)
if(v1的元素个数为奇数) 舍弃序列1中位数前的元素;
else 弃序列1中位数及中位数前的元素;
else 序列1的中位数大于序列2的中位數
if(v2的元素个数为奇数) 舍弃序列1中比中位数大的元素;
else 舍弃序列2的中位数及比中位数小的元素 ;
该题要找出中位数先用了num来指向序列中的第一个元素的下标 ,和end指向序列中的最后
一个元素的下标 ;感觉看起来还是囿点麻烦不是很能懂;难点在于找到序列1和2对比,