C#——自定义泛型链表DEMO
问题描述
已定义如下一个泛型类和泛型接口,请创建一个泛型的MyLinkedList类,表示一个单向链表,满足指定接口和功能。
1)泛型类,代表链表中的节点
public class Node<T> {public T Value { get; set; }public Node<T> Next { get; set; }public Node(T value){Value = value;Next = null;} }
2)泛型接口,定义了列表上可执行的操作
public interface IMyList<T> {void AddToHead(T value);void AddToTail(T value);int Count { get; }bool Contains(T value); }
3)要求链表继承IMyList,实现接口中定义的功能,并实现:一无参构造方法,一有参构造方法(支持任意数量参数),重写ToString方法(生成类似1--> 8--> 9--> 43--> 22-->的字符串)。
class MyLinkedList<T> : IMyList<T> {private Node<T> head; }
4)最终,使用下述Main方法进行测试。
public static void Main() {MyLinkedList<int> lst = new MyLinkedList<int>();Console.WriteLine(lst.Count);Random rd = new Random();for (int i = 0; i < 10; i++){lst.AddToTail(rd.Next(100));}lst.AddToHead(100);lst.AddToTail(100);Console.WriteLine(lst);Console.WriteLine(lst.Count);Console.WriteLine(lst.Contains(100));MyLinkedList<int> list = new MyLinkedList<int>(1, 8, 9, 43, 22);Console.WriteLine(list); }
源代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Homework5
{//1)泛型类,代表链表中的节点public class Node<T>{public T Value { get; set; }public Node<T> Next { get; set; }public Node(T value){Value = value;Next = null;}}//2)泛型接口,定义了列表上可执行的操作public interface IMyList<T>{void AddToHead(T value);void AddToTail(T value);int Count { get; }bool Contains(T value);}//3)要求链表继承IMyList,实现接口中定义的功能,并实现:一无参构造方法,一有参构造方法(支持任意数量参数),重写ToString方法(生成类似1--> 8--> 9--> 43--> 22-->的字符串)。class MyLinkedList<T> : IMyList<T>{private Node<T> head;public MyLinkedList(){}public MyLinkedList(params T[] value) { foreach(T temp in value){AddToTail(temp);}}public int Count {get{int count = 0;if (head != null) {Node<T> temp = head;while (temp!= null){count++;temp = temp.Next;}}return count;} }public void AddToHead(T value){var newNode = new Node<T>(value);if (head == null){head = newNode;}else{newNode.Next = head;head = newNode;}}public void AddToTail(T value){var newNode = new Node<T>(value);if (head == null){head = newNode;}else{Node<T> temp = head;while (temp.Next != null) {temp = temp.Next;}temp.Next = newNode;}}public bool Contains(T value){if (head != null) {Node<T> temp = head;while (temp!= null){if (temp.Value.Equals(value)){return true;}temp = temp.Next;}} return false;}public override string ToString(){string result = "";if (head != null){Node<T> temp = head;while (temp != null){result += temp.Value;if (temp.Next != null)result += ',';temp = temp.Next;}}return result;}}class Program{static void Main(string[] args){MyLinkedList<int> lst = new MyLinkedList<int>();Console.WriteLine(lst.Count);Random rd = new Random();for (int i = 0; i < 10; i++){lst.AddToTail(rd.Next(100));}lst.AddToHead(100);lst.AddToTail(100);Console.WriteLine(lst);Console.WriteLine(lst.Count);Console.WriteLine(lst.Contains(100));MyLinkedList<int> list = new MyLinkedList<int>(1, 8, 9, 43, 22);Console.WriteLine(list);}}
}
运行结果
C#——自定义泛型链表DEMO相关推荐
- C语言 泛型链表的实现
参考文章:使用C语言实现"泛型"链表 文章目录 jiang工给的泛型链表例子,有点看不怎么懂,自己写个看看: 实现方法 方法1:链表指针指向整个结点,结点中存放指向数据的指针 方法 ...
- C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)
示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...
- 自定义泛型集合,接口
自定义泛型集合 package C12_21;public class abstractList {public static void main(String[] args) {stu<Str ...
- java(四)【常用API,自定义泛型、collection接口】
day04[常用API.正则表达式,泛型.Collection集合API] 主要内容 Date类 Java是面向对象的思想,会用一个类来代表一个事物. Date代表了系统当前此刻日期对象!年月日时分秒 ...
- android自定义尺子收集demo
demo合集: https://github.com/dalong982242260/AndroidRuler 1.直尺(测量距离) github:https://github.com/1149863 ...
- Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
文章目录 泛型的概念 集合中使用泛型 自定义泛型结构 泛型在继承上的体现 通配符的使用 泛型的概念 集合容器类在设计阶段/声明阶段不能确定这个容器实际存的是什么类型的对象,所以在JDK1.5之前只能把 ...
- 泛型学习笔记:泛型使用的注意点、泛型在继承方面的体现、自定义泛型结构、泛型应用举例、通配符
泛型学习笔记 集合是为了解决数组某些存储限制的特点出现的,但是数组有一个优点就是存放的数据的类型是确定的,但是集合容器在声明阶段存入的对象是什么类型是不确定的,所以在JDK1.5之前只能把元素的类型设 ...
- Java泛型-泛型作用+泛型在各种数据结构中的使用+自定义泛型
文章目录 1. 概念 2. 为什么要使用泛型(Generic) 2.1 在ArrayList中使用泛型 2.2 在HashMap中使用泛型 3. 自定义泛型结构 3.1 泛型类与泛型接口 3.2 泛型 ...
- c语言是如何实现泛型链表
最近有看一点Linux内核源码,发现内核里大量使用了list_head结构体.百度查了一下,原来内核利用这个结构体实现了泛型. 自认为对链表已经很熟悉的我,决定自己实现一下. 下面以Node和list ...
最新文章
- WCF部署到IIS异常(详细: 不能加载类型System.ServiceModel.Activation.HttpModule )
- php foreach面试题,PHP引用理解之神奇的foreach面试题
- intellij导入scala工程不识别scala语言
- php 中如何重载父类的方法_PHP中子类重载父类的方法【parent::方法名】
- [剑指offer]面试题第[58]题[Leetcode][JAVA][第151题][翻转单词][字符串常用函数总结]
- 完整案例:实现延迟队列的两种方法
- android 粒子动画火焰,canvas粒子火焰跟随动画特效
- python面向对象属性_Python面向对象属性
- SQL中一种类似GUID值的函数实现
- SAP打印脱机请求和输出请求管理
- C#中使用Dictionary实现Map数据结构
- python 贪吃蛇
- 性能测试--网页fps测试
- 云计算技术,主要包含哪些关键技术?
- 【大数据】大数据技术框架,有这一篇文章就够了
- 浅谈公安大数据的建设
- mtk智能机平台LCM,CTP的ESD防护处理
- windows编程学习——1 关闭窗口不退出
- [机器学习] 训练过程中的train,val,test的区别
- MIT多变量微积分--3.矩阵,逆矩阵
热门文章
- 消防荷载楼板按弹性还是塑性计算_现浇楼板裂缝处理办法全总结!
- yii2 请求外部api_微服务架构之「 API网关 」
- qqkey获取原理_获取QQKEY源码[C++版]
- tftp c++ 上传_如何在 Fedora 上建立一个 TFTP 服务器
- 2.控制反转 spring_ioc
- 使用DOM读取和维护XML数据
- 2021宁夏高考成绩查询电话,2021宁夏高考成绩什么时候几点可以查
- oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
- 显示多文档标签_HTML常用基础标签,前端从入门到精通
- go mongodb排序查询_「赵强老师」MongoDB中的索引(下)