问题描述

已定义如下一个泛型类和泛型接口,请创建一个泛型的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相关推荐

  1. C语言 泛型链表的实现

    参考文章:使用C语言实现"泛型"链表 文章目录 jiang工给的泛型链表例子,有点看不怎么懂,自己写个看看: 实现方法 方法1:链表指针指向整个结点,结点中存放指向数据的指针 方法 ...

  2. C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)

    示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...

  3. 自定义泛型集合,接口

    自定义泛型集合 package C12_21;public class abstractList {public static void main(String[] args) {stu<Str ...

  4. java(四)【常用API,自定义泛型、collection接口】

    day04[常用API.正则表达式,泛型.Collection集合API] 主要内容 Date类 Java是面向对象的思想,会用一个类来代表一个事物. Date代表了系统当前此刻日期对象!年月日时分秒 ...

  5. android自定义尺子收集demo

    demo合集: https://github.com/dalong982242260/AndroidRuler 1.直尺(测量距离) github:https://github.com/1149863 ...

  6. Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用

    文章目录 泛型的概念 集合中使用泛型 自定义泛型结构 泛型在继承上的体现 通配符的使用 泛型的概念 集合容器类在设计阶段/声明阶段不能确定这个容器实际存的是什么类型的对象,所以在JDK1.5之前只能把 ...

  7. 泛型学习笔记:泛型使用的注意点、泛型在继承方面的体现、自定义泛型结构、泛型应用举例、通配符

    泛型学习笔记 集合是为了解决数组某些存储限制的特点出现的,但是数组有一个优点就是存放的数据的类型是确定的,但是集合容器在声明阶段存入的对象是什么类型是不确定的,所以在JDK1.5之前只能把元素的类型设 ...

  8. Java泛型-泛型作用+泛型在各种数据结构中的使用+自定义泛型

    文章目录 1. 概念 2. 为什么要使用泛型(Generic) 2.1 在ArrayList中使用泛型 2.2 在HashMap中使用泛型 3. 自定义泛型结构 3.1 泛型类与泛型接口 3.2 泛型 ...

  9. c语言是如何实现泛型链表

    最近有看一点Linux内核源码,发现内核里大量使用了list_head结构体.百度查了一下,原来内核利用这个结构体实现了泛型. 自认为对链表已经很熟悉的我,决定自己实现一下. 下面以Node和list ...

最新文章

  1. WCF部署到IIS异常(详细: 不能加载类型System.ServiceModel.Activation.HttpModule )
  2. php foreach面试题,PHP引用理解之神奇的foreach面试题
  3. intellij导入scala工程不识别scala语言
  4. php 中如何重载父类的方法_PHP中子类重载父类的方法【parent::方法名】
  5. [剑指offer]面试题第[58]题[Leetcode][JAVA][第151题][翻转单词][字符串常用函数总结]
  6. 完整案例:实现延迟队列的两种方法
  7. android 粒子动画火焰,canvas粒子火焰跟随动画特效
  8. python面向对象属性_Python面向对象属性
  9. SQL中一种类似GUID值的函数实现
  10. SAP打印脱机请求和输出请求管理
  11. C#中使用Dictionary实现Map数据结构
  12. python 贪吃蛇
  13. 性能测试--网页fps测试
  14. 云计算技术,主要包含哪些关键技术?
  15. 【大数据】大数据技术框架,有这一篇文章就够了
  16. 浅谈公安大数据的建设
  17. mtk智能机平台LCM,CTP的ESD防护处理
  18. windows编程学习——1 关闭窗口不退出
  19. [机器学习] 训练过程中的train,val,test的区别
  20. MIT多变量微积分--3.矩阵,逆矩阵

热门文章

  1. 消防荷载楼板按弹性还是塑性计算_现浇楼板裂缝处理办法全总结!
  2. yii2 请求外部api_微服务架构之「 API网关 」
  3. qqkey获取原理_获取QQKEY源码[C++版]
  4. tftp c++ 上传_如何在 Fedora 上建立一个 TFTP 服务器
  5. 2.控制反转 spring_ioc
  6. 使用DOM读取和维护XML数据
  7. 2021宁夏高考成绩查询电话,2021宁夏高考成绩什么时候几点可以查
  8. oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
  9. 显示多文档标签_HTML常用基础标签,前端从入门到精通
  10. go mongodb排序查询_「赵强老师」MongoDB中的索引(下)