zoukankan      html  css  js  c++  java
  • 双向链表

    //双向链表实现:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace SequenceList
      8 {
      9     public class DoubleLinkList<T> : IListDS<T>
     10     {
     11 
     12         private DoubleNode<T> head;
     13         public DoubleNode<T> Head
     14         {
     15             get { return head; }
     16             set { head = value; }
     17         }
     18 
     19 
     20         public DoubleLinkList()
     21         {
     22             head = null;
     23         }
     24 
     25 
     26         public int GetLength()
     27         {
     28             if (IsEmpty())
     29             {
     30                 return -1;
     31             }
     32 
     33             int i = 1;
     34 
     35             DoubleNode<T> p = head;
     36             while (p.Next != null)
     37             {
     38                 p = p.Next;
     39                 ++i;
     40             }
     41 
     42             return i;
     43         }
     44 
     45         public void Clear()
     46         {
     47             head = null;
     48         }
     49 
     50         public bool IsEmpty()
     51         {
     52             //throw new NotImplementedException();
     53             return head == null;
     54         }
     55 
     56         public void Append(T item)
     57         {
     58             DoubleNode<T> target = new DoubleNode<T>(item);
     59 
     60             if (IsEmpty())
     61             {
     62                 head = target;
     63                 return;
     64             }
     65             DoubleNode<T> p = head;
     66             while (p.Next != null)
     67             {
     68 
     69                 p = p.Next;
     70 
     71             }
     72             p.Next = target;
     73             target.Prev = p;
     74         }
     75 
     76 
     77         //在第i个位置之前插入
     78         public void Insert(T item, int i)
     79         {
     80             //    throw new NotImplementedException();
     81             if (IsEmpty() || i < 1)
     82             {
     83                 Console.WriteLine("Empty or position is error;");
     84                 return;
     85             }
     86 
     87             DoubleNode<T> target = new DoubleNode<T>(item);
     88             DoubleNode<T> p = head;
     89             if (i == 1)
     90             {
     91                 target.Next = p;
     92                 p.Prev = target;
     93                 head = target;
     94                 return;
     95             }
     96 
     97             int j = 1;
     98             while (p.Next != null && j < i)
     99             {
    100                 p = p.Next;
    101                 ++j;
    102             }
    103 
    104             if (j == i)
    105             {
    106                 p.Prev.Next = target;
    107                 target.Next = p;
    108             }
    109 
    110         }
    111 
    112 
    113         //在第i个位置之后插入
    114         public void InsertAfter(T item,int i)
    115         {
    116             DoubleNode<T> target = new DoubleNode<T>(item);
    117 
    118             if (i < 1)
    119             {
    120                 return;
    121             }
    122 
    123             if (IsEmpty())
    124             {
    125                 head = target;
    126                 return;
    127             }
    128 
    129             DoubleNode<T> p = head;
    130 
    131             int j = 1;
    132             while(p.Next!=null && j<i)
    133             {
    134                 ++j;
    135                 p = p.Next;
    136             }
    137 
    138             if (j == i)
    139             {
    140                 Console.WriteLine(p.Next.Data+"      -----");
    141                 p.Next.Prev = target;
    142                 target.Next = p.Next;
    143                 p.Next = target;
    144                 target.Prev = p;
    145             }
    146 
    147         }
    148 
    149 
    150         public T Delete(int i)
    151         {
    152            // throw new NotImplementedException();
    153 
    154             if (i < 1)
    155                 return default(T);
    156             if (IsEmpty())
    157                 return default(T);
    158 
    159             DoubleNode<T> p = head;
    160             int j = 1;
    161             while (p.Next != null && j < i)
    162             {
    163                 ++j;
    164                 p = p.Next;
    165             }
    166 
    167             if (j == i)
    168             {
    169                 p.Prev.Next = p.Next;
    170                 p.Next.Prev = p.Prev;
    171                 return p.Data;
    172             }
    173             return default(T);
    174         }
    175 
    176         public T GetElem(int i)
    177         {
    178             //   throw new NotImplementedException();
    179 
    180             if (i < 1)
    181                 return default(T);
    182             if (IsEmpty())
    183                 return default(T);
    184 
    185             DoubleNode<T> p = head;
    186 
    187             int j = 1;
    188 
    189             while (p.Next != null && j < i)
    190             {
    191                 ++j;
    192                 p = p.Next;
    193             }
    194 
    195             if (j == i)
    196             {
    197                 return p.Data;
    198             }
    199 
    200 
    201 
    202             return default(T);
    203 
    204         }
    205 
    206         public int Locate(T value)
    207         {
    208            // throw new NotImplementedException();
    209 
    210             if (IsEmpty() || value == null)
    211             {
    212                 return -1;
    213             }
    214 
    215             DoubleNode<T> p = head;
    216             int j = 1;
    217 
    218             while (p.Next!=null && !p.Data.Equals(value))
    219             {
    220                 p = p.Next;
    221                 ++j;
    222             }
    223             return j;
    224         }
    225     }
    226 }

    //双向结点:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace SequenceList
     8 {
     9     public class DoubleNode<T>
    10     {
    11         private T data;                 //数据域
    12         private DoubleNode<T> prev;     //前驱引用
    13         private DoubleNode<T> next;     //后继引用
    14 
    15         //构造器
    16         public DoubleNode()
    17         {
    18             data = default(T);
    19             next = null;
    20         }
    21 
    22         public DoubleNode(T val,DoubleNode<T> p)
    23         {
    24             data = val;
    25             next = p;
    26         }
    27 
    28         public DoubleNode(DoubleNode<T> n)
    29         {
    30             data = default(T);
    31             next = n;
    32         }
    33 
    34         public DoubleNode(T val)
    35         {
    36             data = val;
    37             next = null;
    38         }
    39 
    40         
    41 
    42         //数据域属性:
    43         public T Data
    44         {
    45             get { return data; }
    46             set { data = value; }
    47         }
    48 
    49         public DoubleNode<T> Prev
    50         {
    51             get { return prev; }
    52             set { prev = value; }
    53         }
    54 
    55         public DoubleNode<T> Next
    56         {
    57             set { next = value; }
    58             get { return next; }
    59         }
    60 
    61     }
    62 
    63 }
  • 相关阅读:
    程序员是这样区分Null和Undefined
    JavaScript实现
    获取页面中任意一个元素距离body的偏移量
    js检测数据类型的方法你都掌握了几个?
    处理浏览器兼容你最喜欢用哪种方式
    算法竞赛入门经典 第四章 学习笔记 1
    算法竞赛入门经典 程序4-1 组合数
    算法竞赛入门经典 例题3-1 TeX中的引号
    算法竞赛入门经典 第3章 数组和字符串 学习笔记 3
    算法竞赛入门经典 第3章 数组和字符串 学习笔记 2
  • 原文地址:https://www.cnblogs.com/siyi/p/6525552.html
Copyright © 2011-2022 走看看