最近找工作的原因,遇到了数据结构和算法的题。回来补坑下数据结构的坑,把链表和常用算法手撸了一遍。直接上代码(注释较少,有问题的加q770124049交流):
/// <summary>
/// 链表节点类
/// </summary>
/// <typeparam name="T"></typeparam>
class Node<T>
{
private T data;
private Node<T> preNode;
private Node<T> nextNode;
public Node(){
data = default(T);
preNode = null;
nextNode = null;
}
public Node(T item) {
data = item;
preNode = null;
nextNode = null;
}
public T Data
{
get
{
return data;
}
set
{
data = value;
}
}
internal Node<T> PreNode
{
get
{
return preNode;
}
set
{
preNode = value;
if(value!=null)
value.nextNode = this;
}
}
internal Node<T> NextNode
{
get
{
return nextNode;
}
set
{
nextNode = value;
if(value!=null)
value.preNode = this;
}
}
}
/// <summary>
/// 双链表实现 cxq_20180513
/// </summary>
/// <typeparam name="T"></typeparam>
class LinkClass<T> : InterfaceList<T>
{
private Node<T> head;
private int count = 0;
public LinkClass() {
head = null;
count = 0;
}
public T this[int index]
{
get
{
return GetEle(index);
}
}
public int Count{
get{ return count; }
set{ count = value; }
}
public int Add(T item)
{
Node<T> newNode = new Node<T>(item);
if (head == null)
{
head = new Node<T>();
head.NextNode = newNode;
}
else {
Node<T> temp = head;
while (temp.NextNode != null) {
temp = temp.NextNode;
}
newNode.PreNode = temp;
}
count++;
return count;
}
public void Clear()
{
head = null;
count = 0;
}
public T Delete(int index)
{
Node<T> deleteNode = new Node<T>();
if (index == 0)
{
deleteNode = head.NextNode;
head.NextNode = head.NextNode.NextNode;
}
else {
Node<T> temp = head;
for (int i = 0; i < index; i++)
{
temp = temp.NextNode;
}
deleteNode = temp.NextNode;
temp.NextNode = temp.NextNode.NextNode;
}
count--;
return deleteNode.Data;
}
public T GetEle(int index)
{
Node<T> temp = head;
for (int i = 0; i <= index; i++)
{
temp = temp.NextNode;
}
return temp.Data;
}
public int GetLength()
{
return count;
}
public void Insert(T item, int index)
{
Node<T> newNode = new Node<T>(item);
if (index == 0)
{
newNode.NextNode = head.NextNode;
head.NextNode = newNode;
}
else {
Node<T> temp = head;
for (int i = 0; i < index; i++)
{
temp = temp.NextNode;
}
newNode.NextNode = temp.NextNode;
temp.NextNode = newNode;
}
count++;
}
public bool IsEmpty()
{
return head == null;
}
public int Locate(T value)
{
Node<T> temp = head;
int index = 0;
while (!temp.Data.Equals(value)&&index<count) {
temp = temp.NextNode;
index++;
}
if (index == count)
{
Console.WriteLine("不存在值:" + value);
return -1;
}
else {
return index;
}
}
}