c链表中指针的一些用法要点
/* 结构体不能含有同类型的结构,但是可以含有指向同类型结构的指针。这样的定义是定义一个链表的基础。 */
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 }
c链表中指针的一些用法要点的更多相关文章
- go中指针类型的用法小结
代码 // 指针的用法 package main import ( "fmt" ) func main() { var i int = 100 // 输出i的地址 fmt.Prin ...
- 编程基础-c语言中指针、sizeof用法总结
1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...
- Alan Cox:单向链表中prev指针的妙用
之前发过一篇二级指针操作单向链表的例子,显示了C语言指针的灵活性,这次再探讨一个指针操作链表的例子,而且是一种完全不同的用法. 这个例子是linux-1.2.13网络协议栈里的,关于链表遍历& ...
- 剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
1 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...
- C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,
//将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...
- 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...
- [LeetCode] Linked List Cycle II 单链表中的环之二
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- 关于leetcode中链表中两数据相加的程序说明
* Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ ...
- C语言中怎么将文件里的数据创建到(读到)链表中?
定义的结构体: struct student { ]; //学生学号 ]; //学生姓名 struct student *next; //next 指针 指向 struct student 类型的变量 ...
随机推荐
- jenkins的安装、配置使用
1.jenkins的使用 (1).需要先下载安装JDK 配置jdk的环境 变量JAVA_HOME的值是 jdk 的安装位置, 然后下载安装tomcat 安装好了之后,打开tomcat下的bin文件夹, ...
- Sequence Model-week1编程题2-Character level language model【RNN生成恐龙名 LSTM生成莎士比亚风格文字】
Character level language model - Dinosaurus land 为了构建字符级语言模型来生成新的名称,你的模型将学习不同的名字,并随机生成新的名字. 任务清单: 如何 ...
- MySQL:提高笔记-1
MySQL:提高笔记-1 学完基础的语法后,进一步对 MySQL 进行学习 说明:这是根据 bilibili 上 黑马程序员 的课程 mysql入门到精通 后做的笔记 1. 索引 1.1 索引概述 M ...
- Beta阶段第四次会议
Beta阶段第四次会议 时间:2020.5.20 完成工作 姓名 工作 难度 完成度 ltx 1.对小程序进行修改2.提出相关api修改要求 轻 85% xyq 1.设计所需api文档2.编写相关技术 ...
- Noip模拟68 2021.10.4
T1 玩水 成功在考试的时候注释掉正解,换成了暴力,只因为不敢保证正解思路的正确 脑子瓦特了,不知道把暴力打成函数拼在一起,不知道当时咋想的.... 就是你找有没有一个点上面和左面的字符一样, 如果这 ...
- 2021.7.21考试总结[NOIP模拟22]
终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...
- Linux入门所必备的Linux命令和C语言基础
文件和目录(底部有视频资料) cd /home 进入 '/ home' 目录' cd - 返回上一级目录 cd -/- 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 c ...
- stat命令的实现
任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云链接 测试代码,mystat 与st ...
- Register Abstraction(9)
This post will explain how to use the UVM Register Abstraction Layer (RAL) to generate register tran ...
- 从零开始,无DNS vcenter 6.7 vmotion热迁移,存储集群部署文档。
1,环境准备 准备:Vmware workstation环境 IP地址段规划 ESXI主机IP地址段 192.168.197.4-192.168.197.10 Vcenter Server集群IP地址 ...