标签:提高 如何 删除 因此 类型 nbsp lan 完成 陷阱
内容小结:
1.书上2.3了解到线性表的类型定义,注意类型定义的规范写法;
2.书上2.4、2.5了解到线性表的两种存储结构,即顺序存储(顺序表)和链式存储(链表),进而学习了相关的初始化、插入、删除等操作及其各操作空间、时间复杂度是如何得出的。其中链表又分为单链表、循环链表等,要注意不同链表基本操作的不同点。
3.书上2.6则比较了顺序表和链表在空间性能(存储空间分配、存储密度大小)和时间性能(存取元素效率、插入和删除操作效率)的不同。后续内容则偏向于具体案例和实践方面,个人感觉有助于代码能力的提高。
心得体会:
1.PTA:关于PTA上的作业题和实践题,大多围绕两个有序链表来进行,因此熟练掌握链表的初始化、插入等等操作是很必要的,同时这几个操作也可以反复利用在多道题目里。
接下来是我在作业中遇到的一些不成熟的问题和改进:
①实践2-求两个有序链表序列的交集,需要注意插入新结点的问题——在并集里是先插入新结点,每比较完一次元素,就为新结点赋值;在交集里,应该在比较两元素相等后,再插入新结点赋值,以免造成无效的结点而输出无意义字符。(但是此方法似乎耗时过大?)
②实践2-求两个有序链表合并(新表不含重复元素),这题需要考虑链表的输入带有重复元素的情况。对于这个问题,我考虑的方法是先求交集再去重,可能还存在更好的方法亟待发现。
2.分组讨论:在小组合作讨论代码、评论他组代码的过程中,能够感受到不同人的思想碰撞,汲取到别人更巧妙更有趣的想法,也能反省自己的不足,而且最终完成代码、成功运行的成就感是满满的。最重要的是,在小组讨论中,我发现自己打代码的能力偏弱,速度有点跟不上别人,并且对链表指针的运用也不够纯熟,也会忽略掉题目中的一些陷阱,今后应该在这些方面多加努力。
接下来是我在讨论中遇到的一些问题,以示警醒:
①讨论1-有序链表插入:没有考虑到要插入的数为链表头尾的情况。
②讨论2-带有头尾指针的链表初始化操作:不太分得清.和->的差别,是在编译器的提醒下不断修正的……
1 void init(List &L) 2 {//构造一个空的单链表L 3 L.tail=new LNode; 4 L.tail->next=NULL; 5 L.head=L.tail; 6 }
③讨论2-带有头尾指针的链表删除第一个结点后插入的操作:没有考虑到在只有一个元素的情况下删除的情况,误删了尾指针。
1 void delet(List &L) 2 {//在带头结点的单链表L中,删除第一个结点 3 int x; 4 LNode *s; 5 s=L.head->next; 6 if(s==L.tail) 7 { 8 L.head->next = NULL; 9 L.tail = L.head; 10 } 11 else L.head->next=s->next; 12 delete s; 13 }
接下来的目标:
既要掌握巩固好顺序表和链表的相关操作,尤其是比较特殊的链表,确保能够比较熟练地打出来(无需参考书本);另外,也要努力学习接下来的新知识,好好学习,天天向上(●’?’●)。
标签:提高 如何 删除 因此 类型 nbsp lan 完成 陷阱
原文地址:https://www.cnblogs.com/Function-F/p/12687191.html