C#数据结构之单链表(LinkList)实例详解

C#数据结构之单链表(LinkList)实例详解

概述

单链表是一种简单的数据结构,它由一些节点组成,每个节点包含着一个数据元素和一个指向下一个节点的指针。它的特点是可以快速的插入和删除节点,但在查找元素时效率不高。本篇文章将详细讲解单链表的实现过程和相关细节。

实现步骤

定义节点类

首先需要定义一个单链表节点类,包含两个部分:数据和指向下一个节点的指针。代码如下:

public class Node<T>
{
    public T Data { get; set; }
    public Node<T> Next { get; set; }

    public Node(T data)
    {
        this.Data = data;
        this.Next = null;
    }
}

其中,泛型 <T> 表示该节点可以存储任意类型的数据。

定义链表类

链表类是一个包含节点的集合,每个节点都指向下一个节点。需要定义三个部分:链表的头节点、尾节点和链表的长度。代码如下:

public class LinkedList<T>
{
    private Node<T> head;
    private Node<T> tail;
    private int count;

    public LinkedList()
    {
        this.head = null;
        this.tail = null;
        this.count = 0;
    }
}

实现节点的添加功能

链表的添加操作有两种情况:在头部添加和在尾部添加。代码如下:

public void AddFirst(T data)
{
    Node<T> newNode = new Node<T>(data);

    if (count == 0)
    {
        head = newNode;
        tail = newNode;
    }
    else
    {
        newNode.Next = head;
        head = newNode;
    }

    count++;
}

public void AddLast(T data)
{
    Node<T> newNode = new Node<T>(data);

    if (count == 0)
    {
        head = newNode;
        tail = newNode;
    }
    else
    {
        tail.Next = newNode;
        tail = newNode;
    }

    count++;
}

实现节点的删除功能

链表的删除操作也有两种情况:删除头节点和删除尾节点。代码如下:

public void RemoveFirst()
{
    if (count == 0)
    {
        return;
    }

    if (count == 1)
    {
        head = null;
        tail = null;
    }
    else
    {
        head = head.Next;
    }

    count--;
}

public void RemoveLast()
{
    if (count == 0)
    {
        return;
    }

    if (count == 1)
    {
        head = null;
        tail = null;
    }
    else
    {
        Node<T> current = head;
        while (current.Next != tail)
        {
            current = current.Next;
        }
        current.Next = null;
        tail = current;
    }

    count--;
}

实现链表的遍历功能

链表的遍历功能即按顺序访问整个链表并处理节点数据。代码如下:

public void Traverse()
{
    Node<T> current = head;

    while (current != null)
    {
        // 处理每个节点的数据
        Console.WriteLine(current.Data);
        current = current.Next;
    }
}

示例

示例1:从数组中构建链表

int[] arr = new int[] { 1, 3, 5, 7 };
LinkedList<int> list = new LinkedList<int>();

foreach (int num in arr)
{
    list.AddLast(num);
}

list.Traverse();

以上代码创建了一个整型数组,将其逐个添加到链表中,并通过 Traverse() 方法遍历链表并打印每个节点的数据。

输出结果为:

1
3
5
7

示例2:从文件中读取数据并构建链表

LinkedList<string> list = new LinkedList<string>();

string path = "data.txt";
string[] lines = File.ReadAllLines(path);

foreach (string line in lines)
{
    list.AddLast(line);
}

list.Traverse();

以上代码从文件 data.txt 中读取每一行数据,逐个添加到链表中,并通过 Traverse() 方法遍历链表并打印每个节点的数据。

假设 data.txt 文件中的内容为:

apple
banana
cherry

则输出结果为:

apple
banana
cherry

总结

本篇文章详细讲解了单链表的实现过程和相关细节,包括定义节点类、定义链表类、实现节点的添加和删除功能、实现链表的遍历功能。通过两个示例,展示了如何从数组或文件中构建链表,并遍历链表并处理每个节点的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#数据结构之单链表(LinkList)实例详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C语言实现通用数据结构之通用椎栈

    C语言实现通用数据结构之通用椎栈 概述 通用椎栈(Generic Linked List Stack),简称GLL Stack,是一种通用的数据结构,能够以动态的方式存储和访问任意类型的数据。GLL Stack 采用链表实现,可以进行进栈(push)、出栈(pop)、查看栈顶元素(peek)、判断栈是否为空(isEmpty)等基本操作。 基本操作 数据结构定…

    数据结构 2023年5月17日
    00
  • MySQL索引底层数据结构详情

    MySQL索引底层数据结构详情 MySQL是一种关系型数据库,在设计和使用表时,常常需要使用索引来提高数据库的查询效率。那么,这些索引究竟是如何工作的呢?本文将介绍MySQL索引的底层数据结构,并提供两个示例以帮助读者更好地理解。 索引是什么? 索引是数据库中一种特殊的数据结构,用于加速查询操作。在MySQL中,通常使用B+Tree作为索引的底层数据结构。 …

    数据结构 2023年5月17日
    00
  • Codeforces Round 867 (Div. 3)

    A. TubeTube Feed 分析: 从所有a[i]+i-1<=t的选择种取个max即可 code: #include <bits/stdc++.h> using namespace std; const int N = 55; int a[N], b[N]; int main() { std::ios::sync_with_stdio…

    算法与数据结构 2023年5月4日
    00
  • 自学1

    Problem1 明明的随机数 ## 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N <= 100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“…

    算法与数据结构 2023年4月24日
    00
  • Android开发数据结构算法ArrayList源码详解

    Android开发数据结构算法ArrayList源码详解 概述 Android开发中,大量使用到了数据结构和算法,ArrayList便是其中的一种非常重要的数据结构。ArrayList是Java中非常重要且使用率非常高的一种数据结构,Android开发中也经常使用它来存储数据。本文将深入探究ArrayList的源码,帮助读者更好地理解其工作原理和使用方法。 …

    数据结构 2023年5月17日
    00
  • TypeScript 基础数据结构哈希表 HashTable教程

    TypeScript 基础数据结构哈希表 HashTable 教程 什么是哈希表 HashTable 在计算机科学中,哈希表(HashTable),也叫散列表,是根据关键码值(Key­value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作哈希函数,存放记录的数组叫作哈希表。 如何实现哈…

    数据结构 2023年5月17日
    00
  • 京东LBS推荐算法实践

    作者:京东零售 郑书剑 1、推荐LBS业务介绍 1.1 业务场景 现有的同城购业务围绕京东即时零售能力搭建了到店、到家两种业务场景。同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主站复访复购频次,是零售的重要战略方向。 1.2 名词解释 LBS:基于位置的服务(Location Based Services)。 下文LBS商品代指京东小时…

    算法与数据结构 2023年4月17日
    00
  • Java数据结构与算法之栈(动力节点Java学院整理)

    Java数据结构与算法之栈攻略 什么是栈? 栈是一种线性结构,属于“先进后出”(Last In First Out,LIFO)的数据结构。它只允许在栈顶进行插入和删除操作。 栈的实现 栈的实现有两种方式: 基于数组实现的顺序栈(ArrayStack) 基于链表实现的链式栈(LinkedStack) 1. 基于数组实现的顺序栈 顺序栈的实现需要一个固定大小的数…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部