【c++学习】数据结构中的链表

这篇具有很好参考价值的文章主要介绍了【c++学习】数据结构中的链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构中的链表

链表与线性表相对,链表数据在内存中的存储空间是不连续的,链表每个节点包含数据域和指针域。

代码

下述代码实现了链表及其接口
包括增、删、查、改以及其他一些简单的功能

#include <iostream>

using namespace std;

#define eleType int

struct ListNode{//表示链表的一个节点
	eleType data;
	ListNode *next;
	
	ListNode(eleType x) : data(x),next(NULL){}//构造函数
};


class LinkedList{//链表类
private:
	ListNode *head;
	int size;
	
public:
	LinkedList() : head(NULL), size(0){}//链表的构造函数
	~LinkedList();//析构函数
	void insert(int i, eleType value);//增
	void remove(int i);//删
	ListNode* find(eleType value);//查
	ListNode* get(int i);//查
	void update(int i, eleType value);//改
	void print();
};//模板//1分号

LinkedList::~LinkedList(){
	ListNode *curr = head;
	while(curr != NULL){
	    ListNode *tmp = curr;
		curr = curr->next;
		delete tmp;
	}
}


void LinkedList::insert(int i, eleType value){
    if(i < 0 || i > size){//2是>不是>=
	    throw std::out_of_range("Invalid position");
	}
	ListNode *newNode = new ListNode(value);
	if(i == 0){
		newNode->next = head;
		head = newNode;
	} 
	else{
		ListNode *curr = head;
		for(int j = 0; j < i-1; j++){
		    curr = curr->next;
		}
		newNode->next = curr->next;
		curr->next = newNode;
	}
	size++;
}
	
void LinkedList::remove(int i){
    if(i < 0 || i >= size){
	    throw std::out_of_range("Invalid position");
	}
	if(i == 0){
	    ListNode *tmp = head;
		head = head->next;
		delete tmp;
	}
	else{
	    ListNode *curr = head;
		for(int j = 0 ;j < i-1; j++){
		    curr = curr->next;
		}
		ListNode *tmp = curr->next;
		curr->next = tmp->next;
		delete tmp;
	}
}

ListNode* LinkedList::find(eleType value){
    ListNode *curr = head;
	while(curr != NULL && curr->data != value){
	    curr = curr->next;
	}
	return curr;
}
ListNode* LinkedList::get(int i){
	if(i < 0 || i >= size){
	    throw std::out_of_range("Invalid position");
	}
    ListNode *curr = head;
	for(int j = 0 ;j < i; j++){
		    curr = curr->next;
		}
	return curr;
}

void LinkedList::update(int i, eleType value){
    get(i)->data = value;
}
void LinkedList::print(){
    ListNode *curr = head;
	while(curr){
	    cout << curr->data << " " ;
		curr = curr->next;
	}
	cout << endl;
}

int main()
{
    LinkedList list;
	list.insert(0,10);
	list.insert(1,100);
	list.insert(2,1000);
	list.insert(3,10000);
	list.insert(4,100000);
	list.insert(5,1);
	list.print();//对应运行结果第一行
	
	list.remove(1);
	list.print();//对应运行结果第二行
	
	cout << list.find(10000)->data << endl;//对应运行结果第三行
	
	cout << list.get(4)->data << endl;//对应运行结果第四行
	
	list.update(1,1234);
	list.print();//对应运行结果第五行
   return 0;
}

运行结果:
【c++学习】数据结构中的链表,c++,c++


于 2024-01-23 第一次整理编写

学习时整理,不当之处烦请指正
码字不易,留个赞再走吧文章来源地址https://www.toymoban.com/news/detail-819854.html

到了这里,关于【c++学习】数据结构中的链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】两两交换链表 && 复制带随机指针的链表

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 使用一个栈S来存储相邻两个节点即可 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以

    2024年04月15日
    浏览(30)
  • 数据结构:队列的链表结构(含完整代码,可复制)

    1.输出队列 2.入队一个元素 3.出队一个元素 5.建立链表队列 6.完整代码

    2024年01月16日
    浏览(33)
  • 【数据结构】[LeetCode138. 复制带随机指针的链表]

    给你一个长度为  n  的链表,每个节点包含一个额外增加的随机指针  random  ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的  深拷贝 。 深拷贝应该正好由  n  个  全新  节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的  next  指针和

    2024年02月04日
    浏览(30)
  • 【数据结构OJ题】复制带随机指针的链表

    原题链接:https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 此题可以分三步进行: 1. 拷贝链表的每一个结点,拷贝的结点先链接到被拷贝结点的后面。 2. 复制随机指针的链接:拷贝结点的随机指针指向被拷贝结点随机指针的下

    2024年02月12日
    浏览(29)
  • 【LeetCode】数据结构题解(9)[复制带随机指针的链表]

    所属专栏:玩转数据结构题型❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!

    2024年02月11日
    浏览(37)
  • 【数据结构初阶】四、线性表里的链表(带头+双向+循环 链表 -- C语言实现)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】三、 线性表里的链表(无头+单向+非循环链表 -- C语言实现)-CSDN博客  ====

    2024年02月08日
    浏览(34)
  • 【数据结构】LeetCode升级版的环形链表,复制带随机指针的链表

              1、题目说明           2、题目解析           1、题目说明           2、题目解析      1、题目说明 题目链接: 升级版的环形链表  给定一个链表的头节点 head ,返回链表开始入环的第一个节点。  如果链表无环,则返回NULL。 如果链表中有某个节点,可以通

    2024年01月16日
    浏览(40)
  • 【数据结构和算法】实现带头双向循环链表(最复杂的链表)

    前文,我们实现了认识了链表这一结构,并实现了无头单向非循环链表,接下来我们实现另一种常用的链表结构,带头双向循环链表。如有仍不了解单向链表的,请看这一篇文章(7条消息) 【数据结构和算法】认识线性表中的链表,并实现单向链表_小王学代码的博客-CSDN博客

    2024年01月17日
    浏览(60)
  • 【数据结构初阶】三、 线性表里的链表(无头+单向+非循环链表 -- C语言实现)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】二、 线性表里的顺序表(C语言实现顺序表)-CSDN博客  =========================

    2024年02月08日
    浏览(42)
  • 【数据结构】链表C语言编写的,它定义了一个链表,并实现了一些基本的链表操作,如创建新节点、插入节点、清空链表、输出链表以及查找节点

    这段代码是用C语言编写的,它定义了一个链表,并实现了一些基本的链表操作,如创建新节点、插入节点、清空链表、输出链表以及查找节点。以下是每段代码的详细解释: 文件注释: 这段代码是一个文件注释 包含头文件: #include stdio.h  和  #include stdlib.h :这两个头文件

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包