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).指针域:主要用来当前节点(结 ...
随机推荐
- JavaWeb之Maven配置
Maven和C#的nuget类似,可以通过设置就能引入框架等第三方,方便又省事.Java中使用Maven来管理第三方.今天尝试着配置了一下. 一.JDK的安装 关于JDK的安装可以查看百度经验,设置P ...
- php中常用的字符串格式化函数
ltrim():从字符串左删除空格或其他预定义字符串 rtrim():从字符串的末端开始删除空白字符串或其它预定义字符 trim():从字符串的两端删除空白字符和其他预定字符 str_pad():把字 ...
- 【NOIP模拟】jzoj5233概率博弈(树规)
Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵
- canvas+gif.js打造自己的数字雨头像
前言 昨天 是1024程序员节,不知道各位看官过的怎么样.既然是过节,就要有个过节的样子,比方说,换个头像
- SVN.服务器迁移方法
SVN项目, 源服务器 : 10.10.13.48 目标服务器: 10.10.13.129 要把SVN项目从.48上迁移到.129上. 做法: 准备: 版本库:vos 源服务器 : 10.10.1 ...
- Android Studio 3.0 使用问题解决方案总结
问题:创建新项目非常慢 问题描述: 更新到3.0版本后,出现创建新项目一直停留在如下图的界面: 选择等待?不知道要等到什么时候,这时候怎么办呢?显然,不能一直等待下去呀,需要想办法让他能尽快的加载好才 ...
- 史上最简单的MySQL安装教程之Linux(CentOS6.8)下安装MySQL5.6
一.准备 安装包:Percona-Server-5.6.21-70.0-r688-el6-x86_64-bundle.tar MySQL下载地址:http://www.percona.com/doc/ ...
- 关于git常见的一些问题
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 Mark一下,最近用的比较少,担心忘记了. 作为一个程序员,git或者SVN是必备技能,尤其是 ...
- Mybatis通用Mapper
极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...
- struts2(一)之初识struts2
前言 我们都知道struts2是一个框架,那什么是框架呢?很多人其实不太明白,其实框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们之前 使用的dbutils框架,操作数据,只 ...