C#字典树(字母树)的模板
来源:互联网 发布:开黑用什么软件 编辑:程序博客网 时间:2024/05/21 09:24
保存一下JimLiu大神的
既然JimLiu大神的这个.net博客不维护了。
我就搬过来了。哈哈哈~~~~~希望JimLiu大神不要见怪。。。
/**//// <summary>/// 泛型字母树,忽略大小写/// </summary>/// <typeparam name="T">泛型类型</typeparam>public class TrieTree<T> { private class TrieNode { fields#region fields private TrieNode[] m_Childs; private T m_Value; private bool m_HasValue; #endregion constructors#region constructors /**//// <summary> /// 创建字母树结点,元素被赋值为该类型的默认值 /// </summary> public TrieNode() : this(default(T)) { m_HasValue = false; } /**//// <summary> /// 创建字母树结点 /// </summary> /// <param name="elem">该结点的元素</param> public TrieNode(T elem) { m_Childs = new TrieNode[26]; m_Value = elem; m_HasValue = true; } #endregion properties#region properties /**//// <summary> /// 子节点 /// </summary> public TrieNode[] Childs { get { return m_Childs; } } /**//// <summary> /// 节点的值 /// </summary> public T Value { get { return m_Value; } set { m_Value = value; } } /**//// <summary> /// 结点是否有值 /// </summary> public bool HasValue { get { return m_HasValue; } set { m_HasValue = value; } } #endregion } fields#region fields private TrieNode root = new TrieNode(); #endregion private methods#region private methods TrieNode findNode(string key) { TrieNode node = root; foreach (char c in key) { int i = (c >= 'A' && c <= 'Z') ? (int)(c - 'A' + 'a') : (int)(c - 'a'); if (node.Childs[i] == null) node.Childs[i] = new TrieNode(); node = node.Childs[i]; } return node; } #endregion public methods#region public methods /**//// <summary> /// 插入 /// </summary> /// <param name="key">键</param> /// <param name="value">值</param> public void Insert(string key, T value) { TrieNode node = findNode(key); if (node.HasValue) return; node.Value = value; node.HasValue = true; } /**//// <summary> /// 查找,若不存在,则插入 /// </summary> /// <param name="key">键</param> /// <param name="value">结点不存在时所赋的值</param> /// <returns>查找结果</returns> public T FindOrInsert(string key, T value) { TrieNode node = findNode(key); if (!node.HasValue) { node.Value = value; node.HasValue = true; } return node.Value; } /**//// <summary> /// 查找,若不存在,则返回默认值 /// </summary> /// <param name="key">键</param> /// <param name="defaultValue">默认值</param> /// <returns>查找结果</returns> public T Find(string key, T defaultValue) { TrieNode node = findNode(key); if (node.HasValue) return node.Value; return defaultValue; } #endregion indexer#region indexer /**//// <summary> /// 获取或设置某个键对应的值 /// </summary> /// <param name="key">键</param> /// <returns>查找结果,若不存在,则返回该泛型类型的默认值</returns> public T this[string key] { get { return Find(key, default(T)); } set { TrieNode node = findNode(key); node.HasValue = true; node.Value = value; } } #endregion}
- C#字典树(字母树)的模板
- 字母树 字典树+统计
- 字典树 模板
- 字典树【模板】
- 字典树模板
- 字典树模板
- 字典树模板
- 经典字典树模板
- hdu1247 字典树模板
- 字典树模板
- 字典树模板
- 字典树模板
- 字典树模板
- 字典树 模板
- 1251 字典树 模板
- 数据结构 字典树模板
- 字典树模板
- 字典树(trie)模板
- Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱
- (笔记十)eclipse介绍、JUnit、5.0特性、枚举
- 【数据结构】单链表(无头节点)
- struts2标签 表单验证错误,再次提交不能进入action
- 最短的名字(湖南省赛 最短的名字)
- C#字典树(字母树)的模板
- 关于return返回值
- Request的getParameter和getAttribute方法的区别
- 崩盘! 一季度全球PC销量造20年最大跌幅
- 谈 Linux,Windows 和 Mac
- c++打开外部exe程序
- (笔记十一)反射、JavaBean、内省、BeanUtils框架
- ArrayList和Vector的区别,HashMap和Hashtable的区别
- rqnoj-20