24.5.4数据结构笔记|链表实现以及错误

目录

一、搞清楚原理

必要记住:

插入:

铭记步骤: 

必要知道:

二、<.h>中,所有声明

代码实现

三、实现代码过程中的错误(造的孽)

1)插入函数(头插法)

图示:

​编辑

错误代码:

疑问:

注意:

2)show函数-遍历-输出

错误代码:

疑问:

解决:

3)释放空间

错误代码:

3)删除函数

疑问:

4)释放空间函数、

错误代码:

正确步骤:

5)任意位置插入函数

问题:


一、搞清楚原理

  • 包括定义(2),申请空间,释放空间,插入,删除,展示链表。
  • 链式访问解决顺序存储需要太大的连续空间,实现离散空间组成逻辑上的顺序。

必要记住:

插入:

(这时候p就相当与B了好像)两行代码实现

铭记步骤: 

1、申请空间

2、找到待操作的前一个结点,p指向前一个结点

3、先处理新节点

4、后处理老节点

 删除(!备份):

必要知道:

遍历链表:借助辅助指针。站在一个节点上,先后看条件是否满足。

struct node*p;
while(p){
//.....
p=p->next;
}


while(p&&p->next){
//......
p=p->next;
}

二、<.h>中,所有声明

代码实现

给元素类型起一个别名:

typedef int element;

<.h中声明>:

//
// Created by ljf88 on 24-5-4.
//

#ifndef LINKLIST_H
#define LINKLIST_H

typedef int Elemet;
//表
typedef struct Listnode//此处注意,要先给这个起好名字,不然用不了
{
    Elemet val;
    struct Listnode*next;
}Listnode;
//头
typedef struct
{
    Listnode header;
    int num;
}LinkList;
//对接口的操作,申请、释放
LinkList*createLinkList( );
void releaseLinkList(LinkList*link);
void releaseLinkList1(LinkList*link);
//对表的操作。插入(头插法、任意位置插入、尾插法)、删除。展示
int insertLinkListheader(LinkList*link,Elemet val);
int insertanyPos(LinkList*link,int pos,Elemet val);//找位置函数
int inserttail(LinkList*link,Elemet val);
int deleteLinkList(LinkList*link,Elemet val);

void showLinkList(const LinkList*link);
#endif //LINKLIST_H

三、实现代码过程中的错误(造的孽)

1)插入函数(头插法)

图示:

错误代码:

疑问:

1、框内应该改成P。为什么要引入辅助指针?

2、如何更新表头?

注意:

1、引入辅助指针,是的不是表头的。引入辅助指针的时候,已经顺便把它指向了链表的第一个结点。

2、需要申请一个新结点放val。并给它申请空间

3、更新”表头“,是对头更新,头的num表示总数。

2)show函数-遍历-输出

错误代码:

做个逻辑大题是对的。

疑问:

怎么一个一个沿着链表表示出来感觉有点模糊??


解决:

1、也需要引入辅助指针,辅助指针指向链表的第一个哦。

2、链式结构遍历模板记一下。使用while,不用for。

3)释放空间

错误代码:

疑问:

怎么释放?

3)删除函数

疑问:

1、怎么找到这个元素?函数??不是。用while就可以了。

2、怎么备份?引入临时指针tmp,备份然后释放。

4)释放空间函数、

错误代码:

正确步骤:

1、辅助指针,指向第一个。

2、临时指针,用来备份。备份好像是为了让指针p成功沿着链表一个一个走过去。

3、一个一个释放

4、更新表头

5、释放表头

5)任意位置插入函数

问题:

1、忽略了第一步范围校验。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值