Including the realization of data structure and some exercises.
包含顺序表和链表两部分及一些练习题
实现了顺序表的插入、删除、查找和一些经典例题
1.从顺序表中删除具有最小值得元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行
2.设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)
3.长度为n的序列表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的数据元素
4.从顺序表中删除其值在给定值S与T之间(要求S
5.从有序顺序表中删除所有其值重复的元素,使表中的所有元素的值均不同
6.将两个有序顺序表合并成一个新的有序顺序表,并由函数返回结果顺序表
7.将一个顺序表以第m位元素为界限,把第1到M-1位元素与第M到最后一位元素交换位置
8.线性表中元素递增有序且按顺序存储于计算机内。要求设计一个算法完成用最少时间在表中查找数值为X的元素若找到将其与后继元素位置互换,若找不到将其插入到表中且使表中元素仍递增有序
9.一个长度为L的升序序列S,处于第L/2(向上取整)个位置的数称为S的中位数。现有两个升序序列A、B设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数
10.设序列有n个元素,若一个元素在序列中出现的次数>n/2,则称这个元素为此序列的主元素。假设有一个序列A设计一个尽可能高效的算法,找出A的主元素。若存在则输出主元素;否则输出-1
实现了单链表的头插法、尾插法初始化链表、插入、删除、查找
1.递归地删除不带头结点的单链表L中所有值为x的结点
2.删除带头结点的单链表L中的所有值为x的结点,并释放空间,假设值为x的结点不唯一
3.设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值,注意这个函数如果直接传L会把头结点也输出来,所以在传参的时候要传L->next,也就是去掉头结点。
4.试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点是唯一的)
5.试编写算法将带头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为O(1)
6.有一个带头结点的单链表L,设计一个算法使其元素递增有序
7.假设有两个按元素值递增次序排序的线性表,均以单链表形式存储,请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
8.已知两个链表A和B分别表示两个集合,其元素递增排列。编写一个函数,求A和B的并集,并存放在A链表中。
9.有一个代表头结点的单链表,在不改变链表的前提下,设计一个尽可能高效的算法。查找链表中倒数第K个位置上的结点,若查找成功,输出该结点的data域并返回1;否则只返回0。
10.设str1和str2是分别指向两个单词所在单链表的头结点,链表结构是data|next。设计一个在时间上尽可能高效的算法,找出由str1和str2所指向两个链表共同后缀的起始位置。