哈希表
Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用键来访问集合中的元素。 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。
//哈希表
Hashtable table = new Hashtable();
table.Add("name","林宇隆");//哈希表键名是唯一的
table.Add("id",123);//哈希表键名是唯一的
table["name"] = 3;
foreach (DictionaryEntry i in table)
{
Console.WriteLine(i.Key);
Console.WriteLine(i.Value);
}
//遍历键
foreach (var i in table.Keys)
{
Console.WriteLine(i);
}
//遍历值
foreach (var i in table.Values)
{
Console.WriteLine(i);
table.Remove("name");
Console.WriteLine(table.Contains("name"));
Console.WriteLine(table.ContainsKey("name"));
Console.WriteLine(table.ContainsValue(123));
table.Clear();//清空
链表
public class LinkedNode<T>
{
public LinkedNode<T> nextNode;//指针域
public LinkedNode<T> perNode;//指针域
public T value;//值
public LinkedNode(T value)
{
this.value = value;
}
}
public class LinkList<T>
{
//头结点 尾结点
public LinkedNode<T> Head;
public LinkedNode<T> Last;
//添加结点
public void Add(T value)
{
LinkedNode<T> node = new LinkedNode<T>(value);//新节点
node.value = value;//给结点的数值域赋值
if (Head == null)//判断头结点是否为空
{
Head = node;
Last = node;
}else//不为空时,查到尾节点之后
{
Last.nextNode = node;//将该节点插入到Last的后一个结点
Last = node; //更新尾节点
}
}
//查询 输入一个值,帮我查询返回该节点
public bool Find(T value)
{
LinkedNode<T> node = Head;//从头结点开始遍历
while (node!=null)//直到节点为空
{
if (node.value.Equals(value))//判断结点的值是否为我传进来的
{
return true;
}
node = node.nextNode; //移到下一个结点开始判断
}
return false;//未找到返回空
}
//删除
public void Remove(T value)//移除某个值的节点,先找到结点
{
LinkedNode<T> node = Head;
while (node != null)
{
if (Head.value.Equals(value))//只有一个节点
{
Head = Head.nextNode;//将头结点指向它下一个结点(空),即删除了头结点
}
if (node.nextNode.value.Equals(value))//多个结点
{
//有多个结点 移除头结点
if (Last.value.Equals(value))//当为末尾节点的值时,即传进来的值是尾节点的值
{
node.nextNode = null;//该节点指向空
Last = node;
}
else//在多个节点中间时
{
node.nextNode = node.nextNode.nextNode;//将node的指针域指向node后两个结点,相当于删除了node的下一个结点
}
//有多个结点 移除最后一个结点 last的前一个结点 前一个结点的nextnode指向空
//有多个结点 移除中间结点 该节点的前一个结点指向下下个节点
return;
}
node = node.nextNode;//移到下一个结点开始下一轮判断
}
return;//无该节点
}
}
LinkList<string> list = new LinkList<string>();
list.Add("asd");
list.Add("asdf");
list.Remove("asdf");
Console.WriteLine(list.Find("asd"));
LinkedList<string> list = new LinkedList<string>();
list.AddFirst("头");//插入到头结点前面
//Console.WriteLine(list.First.Value);//list.First找到头结点
list.AddLast("尾节点");
//Console.WriteLine(list.Last.Value);//list.First找到尾结点
list.AddBefore(list.First,"新头");//在某个结点的前面插入一个新节点
//Console.WriteLine(list.First.Value);
list.AddAfter(list.Last, "新尾节点");//在某个结点的后面插入一个新节点为新的尾
//找到指定结点,没找到返回空
LinkedListNode<string> node = list.Find("尾节点");
//Console.WriteLine(node.Value);
//remove 移除
list.Remove("新尾节点");
//Console.WriteLine(list.Last.Value);
list.RemoveLast();
//Console.WriteLine(list.Last.Value);
//查询该结点是否在链表中
//Console.WriteLine(list.Contains("新头"));
//遍历链表
foreach (string i in list)
{
Console.WriteLine(i);
}
Console.WriteLine(list.Last.Previous.Value);