c链表中指针的一些用法要点
2024-10-19 13:52:50
/* 结构体不能含有同类型的结构,但是可以含有指向同类型结构的指针。这样的定义是定义一个链表的基础。 */
1 typedef int Element;
2
3 typedef struct node{
4 Element e;
5 struct node* next;//这里只是声明了一个名为next的指针,指针本身也占内存空间,里面存放的始终是地址。 struct node* 表示指针的类型是 struct node,即指向的地址里存放的是一个结构体
6 }LNode, *Linklist; //LNode等价于struct node; *LinkList 等价于 struct node*
- 等号 = 左右 的 p 和 p->next 意义不同,要注意甄别;
- pre 单独出现的时候代表一个节点 ,如head,就代表head节点;
- pre在 = 左边 出现时代表一个节点,在= 右边 出现时代表节点pre的地址;
p = head; //节点p指向节点head的地址
- p->next 在= 左边 出现时 节点p的指针域;在 = 右边 出现时代表节点 p 的下一个节点地址(即下一节点数据域的地址);
p->next = pre->next; //p 的指针域指向原先 pre 节点的下一个节点地址
pre->next = p; //pre的指针域指向节点 p 的地址
- 单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址"
1 /**
2 * 插入元素
3 */
4 Linklist insert(Linklist head, int k, Element e){
5 int getLength(Linklist head);
6
7 Linklist p = (Linklist)malloc(sizeof(LNode));//申请一个新节点
8 Linklist pre = (Linklist)malloc(sizeof(LNode));//申请一个新节点
9 int length = getLength(head);
10 pre = head;
11
12 if(k == length+1){ //在链表末尾添加新节点
13 while(pre->next) {
14 pre = pre->next; //单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址"
15 }//循环结束时,pre已经到达链表末尾
16 p->e = e;
17 pre->next = p;
18 p->next = NULL;
19 }else if(k > 0 && k <= length){//在链表中间添加节点 ,插入位置从1开始算
20 int j = 1;
21 while(j < k) {
22 pre = pre->next;//单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址"
23 j++;
24 }//循环结束时,pre是要插入位置的前驱节点
25 p->e = e;
26 p->next = pre->next; // p 的指针域指向原先 pre 节点的下一个节点的地址
27 pre->next = p; // pre的指针域指向节点 p 的地址
28 }else{
29 printf("插入的位置有误!\n");
30 }
31 return head;
32 }
最新文章
- Ext Js【Hello World】 ——4.1 beta 1
- 考前复习(codevs 2837)
- 【extjs】 Extjs中的Ext.grid.Panel隐藏列会显示在表头中解决方法
- Android 程序员必须掌握的三种自动化测试方法
- 自己定制Linux发行版(资料)
- UIView中触摸事件touchBegin
- mysql locktables
- js如果你想删除您问
- SpringMVC视图
- 二叉树 - 建立与遍历使用Java
- laravel5.4+vue+vux+element的环境搭配
- 浅谈RMQ
- valueOf函数详解
- yum安装软件报错Segmentation fault处理
- ES6躬行记(2)——扩展运算符和剩余参数
- Week 2 代码规范
- [iOS]App上架流程[利用Archive进行上传]
- mysql半同步开启
- 深度学习原理与框架-神经网络架构 1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差) 4.dropout(防止过拟合操作)
- [剑指Offer]35-复杂链表的复制