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 类型的变量 ...
随机推荐
- 开源协同OA办公平台教程:O2OA服务管理中,接口的调用权限
本文介绍O2OA服务管理中,接口的权限设定和调用方式. 适用版本:5.4及以上版本 创建接口 具有服务管理设计权限的用户(具有ServiceManager角色或Manager角色)打开" ...
- java的加载与执行原理详解
java程序从开发到最终运行经历了什么? (31) 编译期: 第一步:在硬盘某个位置(随意),新建一个xxx.java文件 第二步:使用记事本或者其他文本编辑器例如EditPlus打开xxx.java ...
- D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): error: #5: cannot open source input file "core_cm3.h": No such file or directory
1. 错误提示信息: D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): erro ...
- logging模块二
背景,在学习logging时总是遇到无法理解的问题,总结,尝试一下更清晰明了了,让我们开始吧! logging模块常用format格式说明 %(levelno)s: 打印日志级别的数值 %(level ...
- 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”
在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载. 今天我们将带大家从实际项目出发, ...
- 对dy和Δy的浅薄理解
一.导数定义 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0) ...
- Spring Cloud Alibaba 使用Nacos作为配置管理中心
为什么需要配置中心? 动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署 ...
- MySQL实战优化之InnoDB整体架构
一.InnoDB 更新数据得整体架构 每个组件的作用说明: 用一条更新数据来说明每个主键得作用: update student set name = 'zhangsan' where id = 10 ...
- Logic strength modeling
7.9 Verilog HDL提供了信号争用.双向通过门.电阻式MOS器件.动态MOS.电荷共享的精确建模,并通过允许标量净信号值具有全范围的未知值和不同强度级别或强度级别的组合来实现其他依赖于技术的 ...
- JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本
/** * 异常:在程序中导致程序中断运行的一些指令 * 1.受检异常:编译期 * 2.非受检异常:运行期 * 异常处理过程分析: * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象 * 2. ...