c++的引用和c的指针之创建链表,二叉树的烦恼和区别
/*
**代码功能:创建一个令人头疼的不算头疼的链表,然后把特定的数据删除。
*这次的主题不是在代码上,主要是关于创建链表时候的传参问题,嘿嘿,不相信你没遇到过
*/
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>//要用到分配空间和释放空间
//定义一个链表结构
typedef struct link{
int value;
struct link *next;
}*LINK,linkInstance;
/**如果要传入参数创建链表的话。如下。
**创建:
**一,
void create(LINK <)等价void create(linkInstance *<) , 利用引用。 引用“lt”相当于实参的别名,对实参完全操控
调用在main函数中
LINK lt;
create(lt);
二,这种应该很熟悉
void create(linkInstance *lt)
调用在main函数中
linkInstance lt;
create(<);
结果是这样的:
:
***************************************错误写法***************************************************
**一种错误的写法是
void create(LINK lt)
调用在main函数中:
LINK lt;
create(lt);
为什么是错的,因为lt只是一个拷贝。
这就是你的结果:(哈哈哈哈)

**举个例子,
**void test(int a),上面的错误例子中的 lt 就相当于 a,这样上面那个也就明白了吧
**调用在main中
**int a;
**test(a);
**这就是。。。。。。不对滴。
*/
void create(LINK <){//初始化链表,注意“<”
LINK temp,current;//temp临时空间,用于添加节点
lt = (LINK)malloc(sizeof(struct link));//创建一个头节点
lt->next = NULL;//清空头节点
current = lt;
int value;
printf("输入数据");
//创建节点
for (int i = 0; i < 4; i++){
temp = (LINK)malloc(sizeof(struct link));
if (temp == NULL){
printf("分配空间失败");
exit(0);
}//ifEnd
scanf_s("%d", &value);
temp->value = value;
current->next = temp;
current = current->next;
}//forEnd
temp->next = NULL;//收尾,谁知道你得到的空间里面有什么。
}
void del(LINK <,int val){//删除链表元素
LINK forth=lt;//保存前一个元素,要用的滴下面
LINK current=lt->next;
while (current != NULL){
if (current->value == val){
forth->next = current->next;//上一个元素指向下一个元素,跳过中间的forth , current(forth->next) , current->next
free(current);//释放掉当前空间
}
else{
forth = current;
}
current = forth->next;//指向下一个元素,上面替换掉了。
}//whileEnd
}
void printLink(LINK lt){//打印
LINK L = lt->next;
while (L){
printf("%d\t", L->value);
L = L->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LINK lt;
create(lt);//创建,lt是头节点,头节点不保存数据
del(lt,3);//删除所有的3这个元素,从链表。
printLink(lt);//打印
getchar();
return 0;
}
/*
这是一个作者写的关于引用的详细讲解:http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
*/
c++的引用和c的指针之创建链表,二叉树的烦恼和区别的更多相关文章
- 指针的引用(*&)与指针的指针(**)
指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildi ...
- Java的引用和C++的指针de区别
Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对内存数据的操作,就好像风筝的线轴一样,通过线轴总是能够找到风筝,但是它们在实现,原理作用等方面却有区别. (1)类型:引用其值 ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
- 复制带有random指针的单链表
如图1所示,有一条单链表,其节点除了有next指针外,还有一个random指针.random指针可指向单链表中的任意节点,包括它自身.random指针一旦指定,便不再更改.请设计算法,复制此单链表,并 ...
- 转:Linus:利用二级指针删除单向链表
感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是 ...
- C语言中指针*p[N], (*P)[N],及**p的区别
在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...
- [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?
转自:https://zhidao.baidu.com/question/167695289.html EXCEL绝对引用中$A$1.A$1.$A1三个的区别? 符号“$”加在不地方的含义有何不同? ...
- 40深入理解C指针之---指针与单链表
一.指针与单链表 1.定义:通过使用指针将节点(结点)链接起来成为链表 2.节点(结点): 1).数据域:主要用来存储数据,可以基本数据类型,也可以是构造数据类型: 2).指针域:主要用来当前节点(结 ...
随机推荐
- ELK简介
什么是ELK ELK是ElasticSearch,LogStash以及Kibana三个产品的首字母缩写.是可以和商业产品 Splunk 相媲美开源项目. 2013 年,Logstash 被 Elast ...
- java的windows自动化-自动运行java程序
那么在一些工具齐全并且已经有了一定的写好的java程序的情况下(环境变量和软件见上一章http://www.cnblogs.com/xuezhezlr/p/7718273.html),如何自动化运行j ...
- daterangepicker 使用方法以及各种小bug修复
双日历时间段选择插件 — daterangepicker是bootstrap框架后期的一个时间控件,可以设定多个时间段选项,也可以自定义时间段,由用户自己选择起始时间和终止时间,时间段的最大跨度可以在 ...
- dubbo的架构
dubbo架构图如下所示: 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: ...
- Python实现正交实验法自动设计测试用例
1.简介 正交试验法是研究多因素.多水平的一种试验法,它是利用正交表来对试验进行设计,通过少数的试验替代全面试验,根据正交表的正交性从全面试验中挑选适量的.有代表性的点进行试验,这些有代表性的点具备了 ...
- python的小基础
变量python中的变量为指向常量的地址当常量没有指向时,系统自动回收内存空间如A = 1B = AA = 2print(A,B)#2,1id(A),id(B)id()为python虚拟机的虚拟地址, ...
- Python中subplots_adjust函数的说明
使用subplots_adjust一般会传入6个参数,我们分别用A,B,C,D,E,F表示.然后我们对图框建立坐标系,将坐标轴原点定在左下角点,并将整个图框归一化,即横纵坐标都是0到1之间.从下图中可 ...
- Java 设计模式原则
1. 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起. 换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要抽出来,和其 ...
- CS231n 2017 学习笔记01——KNN(K-Nearest Neighbors)
本博客内容来自 Stanford University CS231N 2017 Lecture 2 - Image Classification 课程官网:http://cs231n.stanford ...
- js数组元素的添加和删除
简单测试例子: var arr = new Array(); arr[0] = "aaa"; arr[1] = "bbb"; arr[2] = "cc ...