单向链表的创建与遍历(c++实现)

前言

这是本人第一篇博客,旨在记录梳理自己学习数据结构的过程(c++实现),另一方面也能给有需要的小伙伴一些学习上的便利,大家一起互相学习!

单向链表

在动态分配内存空间时,最常使用的就是单向链表(single linked list)。一个单向链表节点基本由两个元素组成,即数据字段指针,而指针将会指向下一个元素的内存所在地址。
在单向链表中第一个节点是链表头指针,指向最后一个节点的指针设为NULL,表示它是链表尾,不指向任何地方。

单向链表的创建与遍历

在c++中,若以动态分配产生链表节点的方式,可以先行定义一个类数据类型,接着在类中定义一个指针变量,其数据类型与此类相同,作用是指向下一个链表节点,另外类中至少要有一个数据字段。例如,声明一个书籍链表节点的结构,则数据字段可能包含下面三个:书名(title)、作者(author)、价格(price),以及一个指针(next)。之后就可以动态创建链表的每个节点。
遍历(traverse)单向链表的过程,就是使用指针运算来访问链表中的每一个节点,为了便于操作,可以定义一个指针变量作为链表的读取游标。
本文为了用最简单的范例展示单向链表的创建与遍历,链表结构采用一个数据一个指针的形式,具体实现代码如下所示:

实现代码

#include<iostream>
using namespace std;

class list{  //定义链表结构 
	public:
	int data;
	class list *next;
}; 
typedef class list node;
typedef node *link;
 
int main(){
	link newnode,head,phead;  //声明三个链表结构的指针 
	int n;
	cout<<"请输入将要存储的元素个数: "<<endl;
	cin>>n;
	phead = new node;  //phead暂当链表头指针
	if(!phead){  //分配内存失败时phead=NULL 
		cout<<"[Error!内存分配失败!]"<<endl; 
	}
	cout<<"请依次输入存储元素: "<<endl;
	cin>>phead->data;  //输入节点的数据 
	head = phead;  //保留链表头指针,以phead为指向当前节点的指针
	for(int i = 0;i < n-1;i++){
		newnode = new node;
		if(!newnode){
			cout<<"[Error!内存分配失败!]"<<endl;
		}
		cin>>newnode->data;
		newnode->next = NULL;
		phead->next = newnode;  //把新节点加在链表后面
		phead = phead->next;  //让phead保持在链表的最后面
	}
	cout<<"输出数据: "<<endl;
	phead = head;  //让phead回到链表头
	while(phead!=NULL){
		cout<<phead->data<<"->";
		head = phead;
		phead = phead->next;  //phead按序往后遍历整个链表
		if(!phead) cout<<"NULL"<<endl;
		delete head;  //释放内存空间
	}
	return 0;
}

运行截图

在这里插入图片描述

总结

现在只写了单链表的创建与遍历,后续会继续更新单链表的插入删除翻转

有不足之处大家一起讨论学习,谢谢!

单链表的插入、删除请看我的下一遍文章单链表的插入、删除(c++实现)

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值