标签:单链表 访问 代码量 循环 运行 如何 代码 问题 缺点
顺序表结构体定义。存放数据以及表的长度
顺序表插入。遍历顺序表,找到需要插入的位置,并将该位置及之后的元素均向后移动一个位置
顺序表删除。遍历顺序表,找到需要删除的元素,将该元素之后的元素均向前挪动一个位置
顺序表重复元素删除。遍历两次顺序表,找到重复元素,然后操作删除
顺序表区间删除。遍历顺序表,找到区间内的元素,重新放入顺序表中,并定义自增变量,最后赋给顺序表长度
链表结构体定义。存放数据以及创建后继节点
链表头插法。将每个节点放在头结点之后
链表尾插法。将每个节点放在链表末端
链表插入。找到插入节点的前驱,该节点指向前驱的下一个节点,前驱指向该节点
链表删除。找到要删除的节点的前驱,将前驱指向要删除节点的下一个节点,释放删除的节点
有序表单链表插入。遍历有序表,找到插入节点的前驱,该节点指向前驱的下一个节点,前驱指向该节点,有插入到末尾的情况
有序表单链表删除。遍历有序表,找到要删除的节点的前驱,将前驱指向要删除节点的下一个节点,释放删除的节点
有序表单链表合并。遍历两个单链表,并比较相应元素的大小,哪个链表中相应比较大,就将其放入新建列表中,并指向下一个节点,若元素大小相等,则将该元素放入新建列表里,两个链表元素指向下一个节点
带头结点的循环单链表和循环双链表
本章学了线性表及线性表的各种运算,例如插入、删除等。线性表主要有顺序表和链表两种,而链表又有单、双、循环链表。
根据上述总结可以看出各自的优缺点:顺序表可以很快的找到相应的节点,但比较浪费空间,在处理大量元素时效率就显得低下。
链表对相邻两个数据之间用结点中的指针来指示,不要求逻辑上相邻的两个元素存储的物理空间相邻,对碎片空间的利用率高。
对于线性表的学习,我感觉我还是比较吃力的。上学期的关于链表的知识在现在又重新被激活,又增加了许多知识。
我总是会在链表的操作上栽跟头,还是很不熟练,真的需要代码量来填补。做pta时不能够举一反三,还是对链表理解不够深,需要多多练习。
刚开始没有注意重复的这种情况,改了几次后添了对重复这种情况的操作后就正确了。
刚开始是在一次循环中操作两次,即没有if判断条件,第一次操作L1,第二次操作L2,后来发现这样十分容易出错。问了同学之后,定义flag变量,交替操作就通过了。
刚开始看到了需要排序,但是我不知道怎么插入排序,于是我先输入数据,在排序,期间排序错误,部分正确,后来发现删除函数也有些错误,改过来之后就对了。后来发现其实改一下就是输入插入排序了,如下
该题是一个循环链表,时间复杂度为O(n),空间复杂度为O(1)
建立一个循环链表
while (p->next != p) 遍历循环链表
{
找到每三个人的第三个人
杀死该人即删掉该节点
输出被杀掉的人
p->next = p->next->next; //将该节点从链表上删除。
p = p->next;节点移动
}
难点:将问题转化为循环链表,我们学习主要学习单链表,而循环链表以及双链表只是浅显学了,很少用他们,所以在面对这种题是肯不知道如何去做。题目简单,但其实可以改为n个人排成圈,第m个人自杀。
时间复杂度为O(n)空间复杂度为O(1)
while(指针不为空)
{
oddList->next = evenList->next 下标为单数的节点相互连接
evenList->next = oddList->next->next 下标为双数的节点相互连接
oddList = oddList->next;
evenList = evenList->next;指针指向下一个节点
}
单标链后接上双标链
标签:单链表 访问 代码量 循环 运行 如何 代码 问题 缺点
原文地址:https://www.cnblogs.com/xingyufen/p/12433391.html