zoukankan      html  css  js  c++  java
  • 单链表的实现

        //单链表结点类,采用泛型
        public class Node<T>
        {
            private T data; //数据域,当前结点的数据
            private Node<T> next; //引用域,即下一结点
    
            //构造器:数据域+引用域,普通结点
            public Node(T item, Node<T> p)
            {
                data = item;
                next = p;
            }
    
            //构造器:引用域,头结点
            public Node(Node<T> p)
            {
                next = p;
            }
    
            //构造器:数据域,尾结点
            public Node(T val)
            {
                data = val;
                next = null;
            }
    
            //构造器:无参数
            public Node()
            {
                data = default(T);
                next = null;
            }
    
            //数据域属性
            public T Data
            {
                get
                {
                    return data;
                }
                set
                {
                    data = value;
                }
            }
    
            //引用域属性
            public Node<T> Next
            {
                get
                {
                    return next;
                }
                set
                {
                    next = value;
                }
            }
        }
    
        //链表类,包含链表定义及基本操作方法
        public class MyLinkList<T>
        {
            private Node<T> head; //单链表的头结点
    
            //头结点属性
            public Node<T> Head
            {
                get
                {
                    return head;
                }
                set
                {
                    head = value;
                }
            }
    
            //构造器
            public MyLinkList()
            {
                 head = null;
            }
    
            //求单链表的长度
            public int GetLength()
            {
                Node<T> p = head;
                int len = 0;
                while (p != null)
                {
                    ++len;
                    p = p.Next;
                }
                return len;
            }
    
            //清空单链表
            public void Clear()
            {
                head = null;
            }
    
            //判断单链表是否为空
            public bool IsEmpty()
            {
                if (head == null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            //在单链表的末尾添加新元素
            public void Append(T item)
            {
                Node<T> q = new Node<T>(item);
                Node<T> p = new Node<T>();
                if (head == null)
                {
                    head = q;
                    return;
                }
                p = head;
                while (p.Next != null)
                {
                    p = p.Next;
                }
                p.Next = q;
            }
    
            //在单链表的第i个结点的位置前插入一个值为item的结点
            public void Insert(T item, int i)
            {
                
                if (IsEmpty() || i < 1||i>GetLength ())
                {
                    Console.WriteLine("LinkList is empty or Position is error!");
                    return;
                }
                if (i == 1)
                {
                    Node<T> q = new Node<T>(item);
                    q.Next = head;
                    head = q;
                    return;
                }
                Node<T> p = head;
                Node<T> r = new Node<T>();
                int j = 1;
                while (p.Next != null && j < i)
                {
                    r = p;
                    p = p.Next;
                    ++j;
                }
                if (j == i)
                {
                    Node<T> q = new Node<T>(item);
                    q.Next = p;
                    r.Next = q;
                }
            }
    
            //在单链表的第i个结点的位置后插入一个值为item的结点
            public void InsertPost(T item, int i)
            {
                if (IsEmpty() || i < 1||i>GetLength ())
                {
                    Console.WriteLine("LinkList is empty or Position is error!");
                    return;
                }
                if (i == 1)
                {
                    Node<T> q = new Node<T>(item);
                    q.Next = head.Next;
                    head.Next = q;
                    return;
                }
                Node<T> p = head;
                int j = 1;
                while (p != null && j < i)
                {
                    p = p.Next;
                    ++j;
                }
                if (j == i)
                {
                    Node<T> q = new Node<T>(item);
                    q.Next = p.Next;
                    p.Next = q;
                }
            }
    
            //删除单链表的第i个结点
            public T Delete(int i)
            {
                if (IsEmpty() || i < 0 || i > GetLength())
                {
                    Console.WriteLine("LinkList is empty or Position is error!");
                    return default(T);
                }
                Node<T> q = new Node<T>();
                if (i == 1)
                {
                    q = head;
                    head = head.Next;
                    return q.Data;
                }
                Node<T> p = head;
                int j = 1;
                while (p.Next != null && j < i)
                {
                    ++j;
                    q = p;
                    p = p.Next;
                }
                if (j == i)
                {
                    q.Next = p.Next;
                    return p.Data;
                }
                else
                {
                    Console.WriteLine("The "+i+"th node is not exist!");
                    return default(T);
                }
            }
    
            //获得单链表的第i个数据元素
            public T GetElem(int i)
            {
                if (IsEmpty() || i < 0)
                {
                    Console.WriteLine("LinkList is empty or position is error! ");
                    return default(T);
                }
                Node<T> p = new Node<T>();
                p = head;
                int j = 1;
                while (p.Next != null && j < i)
                {
    
                    ++j;
                    p = p.Next;
                }
                if (j == i)
                {
                    return p.Data;
                }
                else
                {
                    Console.WriteLine("The "+i+"th node is not exist!");
                    return default(T);
                }
            }
    
            //在单链表中查找值为value的结点
            public int Locate(T value)
            {
                if (IsEmpty())
                {
                    Console.WriteLine("LinkList is Empty!");
                    return -1;
                }
                Node<T> p = new Node<T>();
                p = head;
                int i = 1;
                while (!p.Data.Equals(value) && p.Next != null)
                {
                    p = p.Next;
                    ++i;
                }
                return i;
            }
    
            //显示链表
            public void Display()
            {
                Node<T> p = new Node<T>();
                p = this.head;
                while (p != null)
                {
                    Console.Write(p.Data+" ");
                    p = p.Next;
                }
            }
        }

    实例测试程序代码

        public class Program
        {
            static void Main(string[] args)
            {
                MyLinkList<string> myLinkList = new MyLinkList<string>(); //实例化一个单链表
                Console.WriteLine(myLinkList.GetLength());   //获取长度
    
                //添加元素
                myLinkList.Append("good");
                myLinkList.Append("monring");
                myLinkList.Append("lwk");
    
                myLinkList.Insert("!", 5);  //在i结点前插元素,位置错误测试
                myLinkList.InsertPost("!", 5);  //在i结点后插元素,位置错误测试
    
                myLinkList.InsertPost("!", 3);  //后插元素
                myLinkList.Insert(",", 3);  //前插元素
    
                myLinkList.Display();  //显示链表元素
    
                Console.WriteLine(myLinkList.GetElem(4));//获取结点,并显示
    
                myLinkList.Delete(1);  //删除结点
    
                myLinkList.Display();
    
                Console.WriteLine(myLinkList.GetLength()); //显示链表长度
                Console.Read();
            }
        }
  • 相关阅读:
    Jmeter 接口测试实战-有趣的cookie
    Jmeter输出完美报告
    记忆-走进古镇
    JMeter接口测试实战-动态数据验证
    JMeter写入文件
    正则表达式匹配任意字符(包括换行符)
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"
    Unable to get the CMake version located at
    adb 查看 android手机的CPU架构
    java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3
  • 原文地址:https://www.cnblogs.com/greyhh/p/4810343.html
Copyright © 2011-2022 走看看