链表

本文探讨了链表在数据结构中的优势,如高效插入和删除、长度动态扩展,同时指出了查找操作的挑战。着重讲解了双向链表的结构,并通过实例展示了如何使用C++实现链表的创建和遍历,以及NULL和nullptr的区别。
摘要由CSDN通过智能技术生成

链表的插入和删除优于数组,不用移动元素,且易于实现长度扩充,但是查找较为困难。

双向链表的普通结点由信息、上一个结点的地址和下一个结点的地址组成。

在new的头文件中只包含6个重载的new和delete,和一些new的声明。iostream是C++中特定的输入输出流操作以及一些其他常用函数和操作符的声明。里面包含了new头文件的内容,一般只需要在C++程序开头加上"#include"和 using namespace std;这两句代码就可以了。不需要再另外加上new。

PS:

NULL 的弊端: NULL 终究只是一个宏。它是一个整型,而不是指针,所以一旦涉及类型转换就会有风险。因而随之带来的问题是,我们没有办法在不显示声明指针类型的情况下定义一个空指针。

自从C++11以来,有一个小特性完美的解决了这个问题—— nullptr 。作为一个字面常量和一个零指针常数,它可以被隐式转换为任何指针类型。而且可以向后兼容 0 和 NULL 。

#include<iostream>
#include<new>
using namespace std ;

struct ListNode
{
	
	double value ; 
	ListNode *next ;
	
	//构造函数 
	ListNode( double value1 , ListNode *next1 = nullptr )
	{
		value = value1 ;
		next = next1 ;
	 } 
	//当仅指定其value部分,则后继指针默认为nullptr
 
}

//创建链表 
ListNode *numberList = nullptr ;
double number ;
while( numberFile >> number )
{
	numberList = new ListNode( number , numberList ) ; 
	//new开辟空间在堆上,出来的是一段空间的首地址
 } 
 
 //遍历链表 
 ListNode *ptr = numberList ;
 while( ptr != nullptr )
 {
 	cout << ptr -> value << " " ;
 	ptr = ptr -> next ;
  } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值