/// <summary> /// 对于线性探测散列表,调整大小是必须的,因为随着数组非null空间越来越少, /// 碰撞发生的几率会增加,并且散列表在填满时会进入无限循环 /// </summary> private void resize(int p) { LinearProbingHashST<Key, Value> tmp = new LinearProbingHashST<Key, Value>(p); for (int i = 0; i < M; i++) if (keys[i] != null) tmp.Put(keys[i], values[i]); keys = tmp.keys; values = tmp.values; M = tmp.M; }
public void LinearProbingHashPut() { var bst = new LinearProbingHashST <char, int>(); var i = 0; foreach (var c in "SEARCHEXAMPLE".ToCharArray()) { bst.Put(c, i++); } Assert.AreEqual(12, bst.Get('E')); }
public void Run() { Console.WriteLine("Choose file:"); // Prompt Console.WriteLine("1 - tinyST.txt"); // Prompt Console.WriteLine("or quit"); // Prompt var fileNumber = Console.ReadLine(); var fieName = string.Empty; switch (fileNumber) { case "1": fieName = "tinyST.txt"; break; case "quit": return; default: return; } var @in = new In($"Files\\Searching\\{fieName}"); var keyValues = @in.ReadAllLines(); //var list = words.Select(word => new StringComparable(word)).ToList(); //var listComparable = list.Cast<IComparable>().ToList(); //var arrayComparable = list.Cast<IComparable>().ToArray(); //var listStrings = words.ToList(); var st = new LinearProbingHashST <string, string>(); foreach (var keyValue in keyValues) { var splittedKeyValue = keyValue.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var key = splittedKeyValue[0]; var value = splittedKeyValue[1]; st.Put(key, value); } // print results foreach (var item in st.Keys()) { Console.WriteLine(item + " " + st.Get(item)); } Console.ReadLine(); }
public void LinearProbingHashSTTest2() { // testing indexer semantics LinearProbingHashST <int, string> st = new LinearProbingHashST <int, string>(); st[99] = null; Assert.AreEqual(st.Count, 0); st[3] = "abc"; st[2] = "cde"; Assert.AreEqual(st[2], "cde"); st[99] = null; st[2] = null; Assert.AreEqual(st.Count, 1); st.Delete(3); Assert.AreEqual(st.Count, 0); try { string dummyS = st[99]; Assert.IsNull(dummyS); } catch (Exception) { Assert.Fail("it is possible to look up an empty table"); } st[4] = "def"; Assert.IsNull(st[99]); Assert.IsNull(st[3]); Assert.IsNull(st[2]); st[3] = "101"; int oldCount = st.Count; // delete non-existing key does nothing st.Delete(123456); Assert.AreEqual(oldCount, st.Count); LinearProbingHashST <int, int> st2 = new LinearProbingHashST <int, int>(); st2[3] = 22; st2[2] = 33; st2[99] = 44; st2[2] = 55; st2.Delete(3); Assert.IsFalse(st2.Contains(3)); st2[3] = 101; Assert.AreEqual(101, st2[3]); st2.Delete(99); int dummy = st2[99]; // generate null exception }
void STTest() { var strArr = FileHandler.ReadFileAsStrArr("words3.txt"); strArr.Show(); //var st = new SequentialSearchST<string,int>(); //var st = new BinarySearchST<string,int>(strArr.Length); //var st = new BST<string,int>(); //var st = new RedBlackBST<string,int>(); //var st = new SeparateChainingHash<string,int>(); //var st = new SeparateChainingHashST<string,int>(10); //var st = new LinearProbingHashST<string,int>(); var st = new LinearProbingHashST <int, string>(); for (int i = 1; i < strArr.Length; i++) { //st.Put(strArr[i], i); st.Put(i, strArr[i]); } //st.Put("bad", 100); //Console.WriteLine(st.Get("aaa")); //Console.WriteLine(st.Get("bed")); //Console.WriteLine(st.Get("zoo")); //Console.WriteLine(st.Get("xxx")); //Console.WriteLine(st.Get("bad")); //Console.WriteLine(st.Get("yet")); //Console.WriteLine(st.Get("zzz")); #region int -> string st.Put(1, "111"); Console.WriteLine(st.Get(0)); Console.WriteLine(st.Get(1)); Console.WriteLine(st.Get(10)); Console.WriteLine(st.Get(34)); Console.WriteLine(st.Get(35)); Console.WriteLine(st.Get(100)); #endregion #region Floor //Console.WriteLine(); //Console.WriteLine(st.Floor("aaa")); //Console.WriteLine(st.Floor("bed")); //Console.WriteLine(st.Floor("zoo")); //Console.WriteLine(st.Floor("xxx")); //Console.WriteLine(st.Floor("bad")); //Console.WriteLine(st.Floor("baf")); //Console.WriteLine(st.Floor("yet")); //Console.WriteLine(st.Floor("zzz")); #endregion Console.ReadKey(); }
public void LinearProbingHashDelete() { var bst = new LinearProbingHashST <char, int>(1); var i = 0; foreach (var c in "SEARCHEXAMPLE".ToCharArray()) { bst.Put(c, i++); } Assert.AreEqual(12, bst.Get('E')); bst.Delete('E'); Assert.AreEqual(default(int), bst.Get('E')); bst.Put('E', 20); Assert.AreEqual(20, bst.Get('E')); }
public void Run() { Console.WriteLine("Choose file:"); // Prompt Console.WriteLine("1 - tinyST.txt"); // Prompt Console.WriteLine("or quit"); // Prompt var fileNumber = Console.ReadLine(); var fieName = string.Empty; switch (fileNumber) { case "1": fieName = "tinyST.txt"; break; case "quit": return; default: return; } var @in = new In($"Files\\Searching\\{fieName}"); var keyValues = @in.ReadAllLines(); //var list = words.Select(word => new StringComparable(word)).ToList(); //var listComparable = list.Cast<IComparable>().ToList(); //var arrayComparable = list.Cast<IComparable>().ToArray(); //var listStrings = words.ToList(); var st = new LinearProbingHashST<string,string>(); foreach (var keyValue in keyValues) { var splittedKeyValue = keyValue.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); var key = splittedKeyValue[0]; var value = splittedKeyValue[1]; st.Put(key,value); } // print results foreach (var item in st.Keys()) { Console.WriteLine(item + " " + st.Get(item)); } Console.ReadLine(); }
protected override ISymbolTable<string, int?> CreateST() { var hash = new LinearProbingHashST<string, int?>(); hash.Put("S", 0); hash.Put("E", 1); hash.Put("A", 2); hash.Put("R", 3); hash.Put("C", 4); hash.Put("H", 5); hash.Put("E", 6); hash.Put("X", 7); hash.Put("A", 8); hash.Put("M", 9); hash.Put("P", 10); hash.Put("L", 11); hash.Put("E", 12); return hash; }
public void LinearProbingHashSTTest1() { // testing Get/Put semantics LinearProbingHashST <string, int> st = new LinearProbingHashST <string, int>(); Assert.IsTrue(st.IsEmpty); // making sure we can delete all from ST st.Put("asd", 355); st.Put("dsd", 25); st.Put("esd", 15); st.Delete("esd"); st.Delete("dsd"); st.Delete("asd"); Assert.IsTrue(st.IsEmpty); string[] keys = { "to", "be", "or", "not", "to", "be", "is", "quest" }; for (int i = 0; i < keys.Length; i++) { st.Put(keys[i], i); } Assert.IsTrue(!(st.IsEmpty) && (st.Count == 6)); string key = "not"; Assert.IsTrue(st.Contains(key)); st.Delete(key); Assert.IsFalse(st.Contains(key)); Assert.IsNull(st.Get(key)); object value = st.Get("is"); Assert.AreEqual(6, value); value = st.Get("world"); Assert.IsNull(value); int dummy = (int)st.Get("hello"); // generate null exception }
static void Main(string[] args) { ST <string, string> st; st = new SequentialSearchST <string, string>(); st.Put("a", "1"); st.Put("b", "2"); int size = st.Size(); st.Delete("a"); size = st.Size(); SortedST <string, string> sortedSt; sortedSt = new BST <string, string>(); sortedSt.Put("r", "1"); sortedSt.Put("b", "2"); sortedSt.Put("h", "3"); sortedSt.Put("t", "4"); sortedSt.Delete("b"); st = new SeparateChainingHashST <string, string>(); st.Put("f", "1"); st.Put("a", "3"); st.Put("d", "4"); st.Put("h", "9"); st.Put("k", "8"); var v = st.Get("h"); st = new LinearProbingHashST <string, string>(); st.Put("f", "1"); st.Put("a", "3"); st.Put("d", "4"); st.Put("h", "9"); st.Put("u", "8"); v = st.Get("u"); Console.ReadKey(); }