import'dart:io';import'dart:math';classLink{intdata;Linknext;Link(intthis.data){}intgetKey(){returndata;}voiddisplayLink(){stdout.write('$data ');}}classSortedList{Linkfirst;SortedList(){first=null;}/// Insert in orderedvoidinsert(Linklink){intkey=link.getKey();Linkprevious=null;Linkcurrent=first;while(current!=null&&key>current.getKey()){previous=current;current=current.next;}if(previous==null){first=link;}else{previous.next=link;}link.next=current;}/// Remove elementvoiddelete(intkey){Linkprevious=null;Linkcurrent=first;while(current!=null&&key!=current.getKey()){previous=current;current=current.next;}if(previous==null){first=first.next;}else{previous.next=current.next;}}Linkfind(intkey){Linkcurrent=first;while(current!=null&¤t.getKey()<=key){if(current.getKey()==key){returncurrent;}current=current.next;}returnnull;}voiddisplayList(){stdout.write('List (first -> last): ');Linkcurrent=first;while(current!=null){current.displayLink();current=current.next;}stdout.writeln();}}classHashTable{List<SortedList>hashArray;intarraySize;HashTable(intsize){arraySize=size;hashArray=newList<SortedList>(arraySize);for(inti=0;i<arraySize;i++){hashArray[i]=newSortedList();}}voiddisplayTable(){for(inti=0;i<arraySize;i++){stdout.write('$i. ');hashArray[i].displayList();}}inthashFunc(intkey){returnkey%arraySize;}voidinsert(Linklink){intkey=link.getKey();inthashVal=hashFunc(key);hashArray[hashVal].insert(link);}voiddelete(intkey){inthashVal=hashFunc(key);hashArray[hashVal].delete(key);}Linkfind(intkey){inthashVal=hashFunc(key);Linklink=hashArray[hashVal].find(key);returnlink;}}voidmain(){intkey;LinkdataItem;intsize,n;Randomrandom=newRandom();stdout.write('Enter size of hash table: ');size=int.parse(stdin.readLineSync());stdout.write('Enter initial number of items: ');n=int.parse(stdin.readLineSync());HashTablehashTable=newHashTable(size);for(inti=0;i<n;i++){key=random.nextInt(100);dataItem=newLink(key);hashTable.insert(dataItem);}while(true){stdout.writeln('Enter first leter of show, insert, delete, find');Stringchoice=stdin.readLineSync();switch(choice){case's':hashTable.displayTable();break;case'i':stdout.write('Enter key value to insert: ');key=int.parse(stdin.readLineSync());dataItem=newLink(key);hashTable.insert(dataItem);break;case'd':stdout.write('Enter key value to deleete: ');key=int.parse(stdin.readLineSync());hashTable.delete(key);break;case'f':stdout.write('Enter key value to deleete: ');key=int.parse(stdin.readLineSync());dataItem=hashTable.find(key);if(dataItem!=null){stdout.writeln('Found $key');}else{stdout.writeln('Could not find $key');}break;default:stdout.writeln('Invalid entry');}}}