C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作。
这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实现了自定义链表的操作(读者可以在此基础上进一步完善)。因为这段代码涉及一些C#技巧,所以贴出来给初学者学习C#提供一点参考。
实体类:
/// <summary>
/// 学生类
/// </summary>
public class Student
{
public string Name { get; set; }
public int Age { get; set; } public Student(string name, int age)
{
this.Name = name;
this.Age = age;
} public override string ToString()
{
return "\r\n" + this.Name + ":年龄" + this.Age + "岁";
}
}
链表节点类:
/// <summary>
/// 节点类
/// </summary>
/// <typeparam name="T">泛型</typeparam>
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;
} /// <summary>
/// 附加节点
/// </summary>
/// <param name="newNode">新的节点</param>
public void Append(Node<T> newNode)
{
//如果下一节点为null,则将新的节点指向下一节点
if (this.Next == null)
{
this.Next = newNode;
}
//如果下一节点不为null,则直接附加到下一节点
else
{
this.Next.Append(newNode);
}
} public override string ToString()
{
string output = this.Data.ToString();
if (this.Next != null)
{
output += " " + this.Next.ToString();
}
return output;
}
}
链表类:
/// <summary>
/// 链表类
/// </summary>
/// <typeparam name="T">泛型</typeparam>
public class LinkedList<T>
{
Node<T> headNode = null;//头节点 /// <summary>
/// 追加节点方法
/// </summary>
/// <param name="data"></param>
public void Add(T data)
{
if (headNode == null)
{
headNode = new Node<T>(data);
}
else
{
headNode.Append(new Node<T>(data));
}
} /// <summary>
/// 索引器,通过索引获取节点
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public T this[int index]
{
get
{
int temp = ;
Node<T> node = headNode; while (node != null && temp <= index)
{
if (temp == index)
{
return node.Data;
}
else
{
node = node.Next;
}
temp++;
}
return default(T);
}
} public override string ToString()
{
if (headNode != null)
{
return this.headNode.ToString();
}
return string.Empty;
}
}
主函数:
class Program
{
static void Main(string[] args)
{
LinkedList<int> intList = new LinkedList<int>();
Enumerable.Range(, ).ToList<int>().ForEach(x => intList.Add(x));
Console.WriteLine("整型的内容为:{0}\r\n", intList); LinkedList<Student> students = new LinkedList<Student>();
students.Add(new Student("张三", ));
students.Add(new Student("李四", ));
students.Add(new Student("王五", ));
Console.WriteLine(students[].Name + "的年龄为:" + students[].Age); Console.ReadLine();
}
}
最后附录一下微软官方的链表类。https://msdn.microsoft.com/zh-cn/library/he2s3bh7(v=vs.110).aspx。
C# 链表操作的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- YTU 2620: B 链表操作
2620: B 链表操作 时间限制: 1 Sec 内存限制: 128 MB 提交: 418 解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C#的链表操作[数据结构-线性表]
链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...
- linux 内核的链表操作(好文不得不转)
以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- Sublime Text 2&3中输入法不跟随光标移动的问题的解决方法
插件名称:IMESupport GitHub页面:https://github.com/chikatoike/IMESupport 安装方法: 手动安装和通过Package Control在线安装. ...
- 如何编写程序设置Android来电铃声
我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为大家实例讲解下. 1.如果读到的是音频文件路径,需要先将音乐文件插入到多媒体库. Java代码 //设置 ...
- [AngularJS] Best Practise - Resolve promises in router, defer controllers
See more:http://toddmotto.com/opinionated-angular-js-styleguide-for-teams/ /** * Created by Answer12 ...
- IOS - UIImage
IOS中对图片的处理 UIImage UIImage 继承于NSObject 以下介绍一下UIImage中的方法 首先是我们最经常使用的 通过图片的文件名称来获取这个图片 + (UIImage *)i ...
- Opencv cvCircle函数
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, in ...
- SAP交货单过账自动生产采购订单、采购订单自动收货入库
公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...
- C++ (P103—P154)
1 任一指针变量本身的数据值得类型都是unsigned long int 2 指针值为0的叫做空指针,为了安全起见,声明指针时最好初始化,哪怕是初始化为空指针 3 一般不能使用不同类型变量的地址来给指 ...
- 2D几何
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...
- 总结html5-canvas学习笔记
canvas是html5中很重要的一部分,我们可以用它来绘制各种平面图形, 3d图,动画等等.每每看到网上超炫的html5页面,首先立马下载下来,心里想着有一天自己也可以做出这样酷炫的效果,骚年你是不 ...
- alert
先别着急测试,来猜测一下下面一行代码执行的结果 alert(alert(1234567)); 此刻,我自己还不是不太理解 我的分析是这样: alert() 是window下面的一个方法 alert(1 ...