编程思想:编程时先搭好框架,比较难处理的部分用汉字表示,以后慢慢一步一步进行处理
空链的定义#include<stdio.h> typedef struct POINT{
//此为不完全赋初值,指针被赋值为NULL。若不赋值,则head1中的三个成员是有值的,其值为垃圾数据 |
输出链表中的错误void showPoints(POINT head){ printf("\n输入的点坐标如下:\n"); 2)for( ; ;) 3)格式问题 |
销毁链表中的错误void destroyPointLink(POINT *head){ //正确形式 /* //错误形式2: //错误形式2分析:p = head->next; head->next = p->next; 这两条语句可以实现p的移位,所以不需要for循环进行移位 /* //错误形式1: |
错误形式1分析如下: 一般人的思维都是从后往前释放,则: 1)第一次循环时,找到末节点,释放。灰色表示已经释放,但是释放之后,p节点的前一个节点的链域值并未受到任何改变,依然指向一个已经释放的空间 |
正确思路分析如下: 正确形式为从前往后释放,理解如上,终止条件理解如下: |
插入链表中的分析void insertPoint(POINT *head){ POINT *p; //需要插入的新点 //1.输入新点坐标(newPoint) p = (POINT *)malloc(sizeof(POINT)); //malloc()一定要记得加头文件 //2.输入指定点坐标(oldPoint) //3.找与oldPoint的row和col相同的前驱节点 //4.完成插入 //自己代码 //老师代码(代码优化) 插入时分析如下: |
排序时的分析void sortByRow_add(POINT *head){ printf("\n下面进行排序(按行坐标升序排序)操作:"); for(pre = head->next; pre; pre = pre->next){ 问题:为什么排序时还要继续交换指针域? 解答:见博客 https://blog.csdn.net/tennysonsky/article/details/51076340 非常详细 ********************************************************************************************************************************* 下面这个问题和本题无关,只是记录在此而已: 问题:如何在不引入tmp节点的情况下进行两个节点的交换? (1)两个节点相邻 (2)两个节点不相邻 找不见了,嘤嘤嘤,有机会再碰吧。。。 |