链表例题中的小错误
编程思想:编程时先搭好框架,比较难处理的部分用汉字表示,以后慢慢一步一步进行处理
空链的定义#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.完成插入
//自己代码
//老师代码(代码优化)
插入时分析如下: |
排序时的分析 问题:为什么排序时还要继续交换指针域? 解答:见博客 https://blog.****.net/tennysonsky/article/details/51076340 非常详细
|