<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Adavidoaiei Dumitru-Cornel</title>
    <description>The latest articles on DEV Community by Adavidoaiei Dumitru-Cornel (@adavidoaiei).</description>
    <link>https://dev.to/adavidoaiei</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F53520%2F8d07bd8c-cc54-459e-b5ed-a1eb253de7a7.jpg</url>
      <title>DEV Community: Adavidoaiei Dumitru-Cornel</title>
      <link>https://dev.to/adavidoaiei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adavidoaiei"/>
    <language>en</language>
    <item>
      <title>Least Frequently Used Cache Implementation</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Fri, 03 Jul 2020 05:01:47 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/least-frequently-used-cache-implementation-ee8</link>
      <guid>https://dev.to/adavidoaiei/least-frequently-used-cache-implementation-ee8</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/adavidoaiei/LeastFrequentlyUsedCache"&gt;https://github.com/adavidoaiei/LeastFrequentlyUsedCache&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;The idea behind least frequently cache policy is that for each item from cache it keeps a use count which increments each time when the item is accessed, when cache exceed the limit this evicts(removes) the element with minimum use count freeing memory for a new element.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;NuGet package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install-Package LfuCache -Version 1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example Using
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;ICache&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;LfuCache&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Helene"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"surname"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Stuart"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;The &lt;b&gt;LfuCache&lt;/b&gt; implements interface &lt;b&gt;ICache&lt;/b&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V6xIkEuB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1582909400/diagram_xkbden.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V6xIkEuB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1582909400/diagram_xkbden.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's needed a data structure to store elements from cache sorted by use count, the current implementation uses a SortedList where key is use count and Value is LinkedList of elements from cache with the same use count, SortedList sorts LinkedLists by use count using a binary tree.&lt;br&gt;
This data structure allows to run Add/Get operations in O(log n) time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--04_FAP3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556623202/binary_tree_linked_list_r9zgzj.jpg" class="article-body-image-wrapper"&gt;&lt;img width="800px" height="400px" src="https://res.cloudinary.com/practicaldev/image/fetch/s--04_FAP3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556623202/binary_tree_linked_list_r9zgzj.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance benchmark &lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;1000.000 add/get operations on implemented Least Frequently Used Cache of size 90.000 using elements from a list with 100.000 takes 466ms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0Y4jY4PU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dbvcampra/image/upload/v1469634935/lfu_syqnac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0Y4jY4PU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dbvcampra/image/upload/v1469634935/lfu_syqnac.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This cache runs faster than MemoryCache from .NET Framework and consumes less memory than this on the same benchmark.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OXzZD_Wg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dbvcampra/image/upload/v1469634935/mc_ikzrsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OXzZD_Wg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://res.cloudinary.com/dbvcampra/image/upload/v1469634935/mc_ikzrsm.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Add/Get operations sequence is generated random in an operations array of size OperationsCount, this operations process elements from a list of size EelementsCount using selected cache.&lt;/p&gt;

&lt;p&gt;Performance benchmarks have been run with the following library &lt;a href="https://benchmarkdotnet.org/"&gt;PerformanceDotNet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KmB_UOAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556225816/benchmarks_gqqzru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KmB_UOAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556225816/benchmarks_gqqzru.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Unit Tests Code Coverage
&lt;/h2&gt;

&lt;p&gt;The unit tests are written using &lt;strong&gt;MSTest framework&lt;/strong&gt; and the code coverage report is generated with Azure Pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EHrbgT5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556279286/code_coverage_lzv2si.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EHrbgT5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556279286/code_coverage_lzv2si.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to compile and run Minix 3 operating system under linux</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Mon, 08 Jun 2020 19:20:24 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/how-to-compile-and-run-minix-3-operating-system-under-linux-11m3</link>
      <guid>https://dev.to/adavidoaiei/how-to-compile-and-run-minix-3-operating-system-under-linux-11m3</guid>
      <description>&lt;p&gt;The Minix operating system was created by &lt;a href="https://en.wikipedia.org/wiki/Andrew_S._Tanenbaum"&gt;Andrew S. Tanenbaum&lt;/a&gt; and inspired &lt;a href="https://en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt; in creation of Linux operating system.&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://en.wikipedia.org/wiki/Andrew_S._Tanenbaum"&gt;Andrew S. Tanenbaum&lt;/a&gt; wrote two reference books in Computer Science &lt;a href="https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X"&gt;Modern Operating Systems&lt;/a&gt; and &lt;a href="https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/"&gt;Computer Networks&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;MINIX 3 is a free, open-source, operating system designed to be highly reliable, flexible, and secure. It is based on a tiny microkernel running in kernel mode with the rest of the operating system running as a number of isolated, protected, processes in user mode. It runs on x86 and ARM CPUs, is compatible with NetBSD, and runs thousands of NetBSD packages.&lt;/p&gt; 

&lt;h1&gt;Install depedencies&lt;/h1&gt;

&lt;p&gt;Before attempting to cross-compile MINIX, you need a working C toolchain, Git and some additional software on your host platform.&lt;/p&gt;

&lt;p&gt;For Debian-based operating systems, run the following command as super-user:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Note: Also on Ubuntu, if you get an error stating that “'/lib/cpp' fails sanity check”, you need to install the GNU C++ compiler:&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Note: On FreeBSD and Minix (compiling for ARM on x86, e.g.), if you get a message along the lines of “Skipping image creation: missing tool 'mcopy'”, please install the emulators/mtools package.

&lt;h1&gt;Getting the sources&lt;/h1&gt;

&lt;p&gt;Once the required tools are installed, the next step is to obtain the sources. Run the following commands in a terminal:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
NOTE: The releasetools script will generate object files and put them outside the source directory; i.e., if you've cloned to ~/minix/src/ and build from there, things will start showing up in ~/minix/ as an artifact of the build process.

&lt;h1&gt;Cross-building for x86&lt;/h1&gt;

&lt;p&gt;It's time to build MINIX itself. There are some wrapper scripts that will build ready-to-boot images from scratch (i.e. just the minix source tree) for either x86 or ARM. These scripts produce a lot of output and will take a while to complete the first time - a cross-toolchain based on LLVM is built from scratch.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
A command line for running the result in a KVM virtual machine is printed at the end of the process.&lt;br&gt;&lt;br&gt;
To install quemu run:&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
To boot this image on kvm using the bootloader:&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-R0WKMwxLW2Q/Xt5ulTAtdYI/AAAAAAAAHqg/u6sRF95BqPsiN6YxOBwScraR-MO1frPwQCLcBGAsYHQ/s1600/Screenshot%2Bfrom%2B2020-06-08%2B19-54-35.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6irNNWvK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://2.bp.blogspot.com/-R0WKMwxLW2Q/Xt5ulTAtdYI/AAAAAAAAHqg/u6sRF95BqPsiN6YxOBwScraR-MO1frPwQCLcBGAsYHQ/s1600/Screenshot%252Bfrom%252B2020-06-08%252B19-54-35.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;

</description>
      <category>minix</category>
      <category>operatingsystem</category>
      <category>compiling</category>
      <category>tanenbaum</category>
    </item>
    <item>
      <title>A basic implementation of Model-View-Controller pattern in only 20 lines of code based on OOP</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Tue, 21 Apr 2020 13:38:05 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/a-basic-implementation-of-model-view-controller-pattern-in-only-20-lines-of-code-based-on-oop-231</link>
      <guid>https://dev.to/adavidoaiei/a-basic-implementation-of-model-view-controller-pattern-in-only-20-lines-of-code-based-on-oop-231</guid>
      <description>&lt;p&gt;I will present in this article a easy way to separate PHP code from HTML code using Model-View-Controller pattern, almost all PHP MVC frameworks implement this, at the beginning of PHP was common to interpolate PHP code with HTML code, the PHP code runs on server and generate HTML code.&lt;br&gt;&lt;br&gt;
index.php&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
&lt;b&gt;.htacces&lt;/b&gt; redirects all requests to &lt;b&gt;index.php&lt;/b&gt;.&lt;br&gt; &lt;br&gt;
What is doing the following request: &lt;b&gt;&lt;a href="http://localhost/forecast/index"&gt;http://localhost/forecast/index&lt;/a&gt;&lt;/b&gt;   ?&lt;br&gt;
It is searching the class forecast in the controllers folder if exists creates object forecast, after that checks if exists method index and invokes it, this is a basic implementation of routing in a common MVC frameworks.&lt;br&gt;
Root of web application has the following structure:&lt;br&gt;
-&lt;b&gt;folder controllers&lt;/b&gt;&lt;br&gt;
-&lt;b&gt;folder models&lt;/b&gt;&lt;br&gt;
-&lt;b&gt;foder views&lt;/b&gt;&lt;br&gt;
-&lt;b&gt;file .htaccess&lt;/b&gt;&lt;br&gt;
-&lt;b&gt;file index.php&lt;/b&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
/controllers/forecast.php&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
/views/forecast.html&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
/models/money_per_month.php&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
 &lt;br&gt;
The complete code could you find on GitHub: &lt;a href="https://github.com/adavidoaiei/Model-View-Controller-Pattern"&gt;&lt;/a&gt;&lt;a href="https://github.com/adavidoaiei/Model-View-Controller-Pattern"&gt;https://github.com/adavidoaiei/Model-View-Controller-Pattern&lt;/a&gt;

</description>
      <category>php</category>
      <category>oop</category>
      <category>mvc</category>
      <category>pattern</category>
    </item>
    <item>
      <title>Fundamental Data Structures and Algorithms in C#</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Fri, 17 Apr 2020 11:54:50 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/fundamental-data-structures-and-algorithms-in-c-4ocf</link>
      <guid>https://dev.to/adavidoaiei/fundamental-data-structures-and-algorithms-in-c-4ocf</guid>
      <description>&lt;p&gt;Stack&lt;br&gt;
Queue&lt;br&gt;
Linked List&lt;br&gt;
Hashtable&lt;br&gt;
Binary Search&lt;br&gt;
Binary Search Tree&lt;br&gt;
Graphs&lt;br&gt;
Sorting Algorithms&lt;br&gt;&lt;/p&gt;

&lt;p&gt;The importance of the algorithms complexity is given by the fact that it tells us if the code is scaling. Most fundamental data structures and algorithms are already implemented in the &lt;b&gt;.NET Framework&lt;/b&gt;, it is important to know how these data structures work and what time, memory complexity they have for the basic operations: accessing element, searching element, deleting element, adding element.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://3.bp.blogspot.com/-FKfFL6z0zcI/XlfPWDD-SGI/AAAAAAAAHPk/MQ1l_RovxXgTIJCTReag9FzJRA3TILiYACLcBGAsYHQ/s1600/7365ce00a403fa7605fd2058c80ea65599ce67a2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F3.bp.blogspot.com%2F-FKfFL6z0zcI%2FXlfPWDD-SGI%2FAAAAAAAAHPk%2FMQ1l_RovxXgTIJCTReag9FzJRA3TILiYACLcBGAsYHQ%2Fs1600%2F7365ce00a403fa7605fd2058c80ea65599ce67a2.png" width="800" height="431"&gt;&lt;/a&gt;&lt;br&gt;
To get an idea of ​​what a good complexity means and a less good one we have the following chart:&lt;a href="https://3.bp.blogspot.com/-DnioLTNlg2w/XlfPxIW0RlI/AAAAAAAAHPo/Glbj6UQ7KGA1OumrK_w-1-MArhdtKnuvACLcBGAsYHQ/s1600/8920364de7d83c9b50d5c51a5f385f20b4dd65d4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F3.bp.blogspot.com%2F-DnioLTNlg2w%2FXlfPxIW0RlI%2FAAAAAAAAHPo%2FGlbj6UQ7KGA1OumrK_w-1-MArhdtKnuvACLcBGAsYHQ%2Fs1600%2F8920364de7d83c9b50d5c51a5f385f20b4dd65d4.png" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;b&gt;.NET Framework&lt;/b&gt; we have implemented the following data structures: &lt;b&gt;array&lt;/b&gt;, &lt;b&gt;stack&lt;/b&gt;, &lt;b&gt;queue&lt;/b&gt;, &lt;b&gt;linked list&lt;/b&gt; and algorithms: &lt;b&gt;binary search&lt;/b&gt;, the rest which we do not find in the &lt;b&gt;.NET Framework&lt;/b&gt; can be found in &lt;b&gt;NuGet packages&lt;/b&gt; or on &lt;b&gt;GitHub&lt;/b&gt;. &lt;b&gt;Array&lt;/b&gt; is one of the most used and well-known data structures and I will not go into detail with the operating principle.&lt;/p&gt;

&lt;h2 id="stiva"&gt; Stack&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Stack&lt;/b&gt; is a data structure implemented in the &lt;b&gt;.NET Framework&lt;/b&gt; in two ways, simple stack in &lt;b&gt;System.Collections&lt;/b&gt; namespace, and stack as generic data structure in &lt;b&gt;System.Collections.Generic&lt;/b&gt; namespace, the principle of stack structure operation is LIFO (last in first out), the last element entered first out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://3.bp.blogspot.com/-ZTPyluNn8oU/XlkES_014qI/AAAAAAAAHRs/fG18AQEHxAwtzXiM7nKbssA3sl3uPVAtQCLcBGAsYHQ/s1600/0_SESFJYWU5a-3XM9m.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F3.bp.blogspot.com%2F-ZTPyluNn8oU%2FXlkES_014qI%2FAAAAAAAAHRs%2FfG18AQEHxAwtzXiM7nKbssA3sl3uPVAtQCLcBGAsYHQ%2Fs1600%2F0_SESFJYWU5a-3XM9m.gif" width="640" height="400"&gt;&lt;/a&gt; &lt;br&gt;
Example of using &lt;b&gt;simple stack&lt;/b&gt; from the namespace &lt;b&gt;System.Collections&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SamplesStack&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;

   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="c1"&gt;// Creates and initializes a new Stack.&lt;/span&gt;
      &lt;span class="n"&gt;Stack&lt;/span&gt; &lt;span class="n"&gt;myStack&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="n"&gt;myStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;myStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;myStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Displays the properties and values of the Stack.&lt;/span&gt;
      &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"myStack"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"\tCount:    {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;myStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"\tValues:"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;PrintValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myStack&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;

   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;PrintValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt; &lt;span class="n"&gt;myCollection&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;myCollection&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"    {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="cm"&gt;/*
This code produces the following output.
myStack
    Count:    3
    Values:    !    World    Hello
*/&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Example of using &lt;b&gt;generic stack&lt;/b&gt; from the namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"three"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"five"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// A stack can be enumerated without disturbing its contents.&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nPopping '{0}'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Peek at next item to destack: {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Peek&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Popping '{0}'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

        &lt;span class="c1"&gt;// Create a copy of the stack, using the ToArray method and the&lt;/span&gt;
        &lt;span class="c1"&gt;// constructor that accepts an IEnumerable&amp;lt;T&amp;gt;.&lt;/span&gt;
        &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;stack2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToArray&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nContents of the first copy:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stack2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Create an array twice the size of the stack and copy the&lt;/span&gt;
        &lt;span class="c1"&gt;// elements of the stack, starting at the middle of the&lt;/span&gt;
        &lt;span class="c1"&gt;// array.&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;array2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CopyTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Create a second stack, using the constructor that accepts an&lt;/span&gt;
        &lt;span class="c1"&gt;// IEnumerable(Of T).&lt;/span&gt;
        &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;stack3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nContents of the second copy, with duplicates and nulls:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stack3&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nstack2.Contains(\"four\") = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nstack2.Clear()"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nstack2.Count = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stack2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/* This code example produces the following output:
five
four
three
two
one
Popping 'five'
Peek at next item to destack: four
Popping 'four'
Contents of the first copy:
one
two
three
Contents of the second copy, with duplicates and nulls:
one
two
three
stack2.Contains("four") = False
stack2.Clear()
stack2.Count = 0
 */&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Stack applications:&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;undo / redo functionality&lt;/li&gt;
&lt;li&gt;word reversal&lt;/li&gt;
&lt;li&gt;stack back/forward on browsers&lt;/li&gt;
&lt;li&gt;backtracking algorithms&lt;/li&gt;
&lt;li&gt;bracket verification&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="coada"&gt;
Queue&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Queue&lt;/b&gt; is a data structure implemented in the &lt;b&gt;.NET Framework&lt;/b&gt; in two ways, the simple queue in &lt;b&gt;System.Collections&lt;/b&gt; namespace, and the queue as the generic data structure in &lt;b&gt;System.Collections.Generic&lt;/b&gt; namespace, the working principle of queue structures is FIFO (first in first out), the first element entered first out.&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-N-v_FiIdQXM/XlkFCQQYtPI/AAAAAAAAHR0/zxkuX6WfQS8Y8Mkoj1nHZDWtMOD3MjsUwCLcBGAsYHQ/s1600/0_E33E-AjyAUTFjVmM.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-N-v_FiIdQXM%2FXlkFCQQYtPI%2FAAAAAAAAHR0%2FzxkuX6WfQS8Y8Mkoj1nHZDWtMOD3MjsUwCLcBGAsYHQ%2Fs1600%2F0_E33E-AjyAUTFjVmM.gif" width="640" height="400"&gt;&lt;/a&gt;&lt;br&gt;
Example of using &lt;b&gt;the simple queue&lt;/b&gt; from the namespace &lt;b&gt;System.Collections&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

 &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SamplesQueue&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;

       &lt;span class="c1"&gt;// Creates and initializes a new Queue.&lt;/span&gt;
       &lt;span class="n"&gt;Queue&lt;/span&gt; &lt;span class="n"&gt;myQ&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
       &lt;span class="n"&gt;myQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="n"&gt;myQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="n"&gt;myQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

       &lt;span class="c1"&gt;// Displays the properties and values of the Queue.&lt;/span&gt;
       &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"myQ"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"\tCount:    {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;myQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"\tValues:"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="nf"&gt;PrintValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myQ&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;PrintValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt; &lt;span class="n"&gt;myCollection&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;myCollection&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"    {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="cm"&gt;/*
 This code produces the following output.
 myQ
     Count:    3
     Values:    Hello    World    !
*/&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Example of using &lt;b&gt;the generic queue&lt;/b&gt; from the namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"three"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"five"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// A queue can be enumerated without disturbing its contents.&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nDequeuing '{0}'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dequeue&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Peek at next item to dequeue: {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Peek&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Dequeuing '{0}'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dequeue&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

        &lt;span class="c1"&gt;// Create a copy of the queue, using the ToArray method and the&lt;/span&gt;
        &lt;span class="c1"&gt;// constructor that accepts an IEnumerable&amp;lt;T&amp;gt;.&lt;/span&gt;
        &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;queueCopy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToArray&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nContents of the first copy:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;queueCopy&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Create an array twice the size of the queue and copy the&lt;/span&gt;
        &lt;span class="c1"&gt;// elements of the queue, starting at the middle of the&lt;/span&gt;
        &lt;span class="c1"&gt;// array.&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;array2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CopyTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Create a second queue, using the constructor that accepts an&lt;/span&gt;
        &lt;span class="c1"&gt;// IEnumerable(Of T).&lt;/span&gt;
        &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;queueCopy2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;array2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nContents of the second copy, with duplicates and nulls:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;queueCopy2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nqueueCopy.Contains(\"four\") = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;queueCopy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nqueueCopy.Clear()"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;queueCopy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nqueueCopy.Count = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;queueCopy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/* This code example produces the following output:
one
two
three
four
five
Dequeuing 'one'
Peek at next item to dequeue: two
Dequeuing 'two'
Contents of the copy:
three
four
five
Contents of the second copy, with duplicates and nulls:
three
four
five
queueCopy.Contains("four") = True
queueCopy.Clear()
queueCopy.Count = 0
 */&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Real life example of queue:&lt;/b&gt;&lt;br&gt;
The system from the point of sale of a restaurant.&lt;/p&gt;

&lt;h2 id="lista"&gt;
Linked List&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Linked List&lt;/b&gt; is a data structure implemented in the &lt;b&gt;.NET Framework&lt;/b&gt; as a &lt;b&gt;generic data structure&lt;/b&gt; in &lt;b&gt;System.Collections.Generic&lt;/b&gt; namespace, the principle of functioning of the linked list structures is that each node in the list has a reference to the next node, except the tail of the list, which has no reference to the next node.&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-mycmX6b0ubA/XlkFzTEJdZI/AAAAAAAAHSA/-dlS_xT-Wmoh8qPLWWiNO7Lthu8ByHY0wCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-1.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-mycmX6b0ubA%2FXlkFzTEJdZI%2FAAAAAAAAHSA%2F-dlS_xT-Wmoh8qPLWWiNO7Lthu8ByHY0wCLcBGAsYHQ%2Fs1600%2Flinked-list-programming-interview-questions-1.gif" width="800" height="317"&gt;&lt;/a&gt;&lt;br&gt;
An example of search in linked list of the third item starting from the end:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-TFPEI7QYVVQ/XlkGVSEJiZI/AAAAAAAAHSI/M_oTsk9FQeEpkqac8UCZiI_dA5Khr8MPQCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-5.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F2.bp.blogspot.com%2F-TFPEI7QYVVQ%2FXlkGVSEJiZI%2FAAAAAAAAHSI%2FM_oTsk9FQeEpkqac8UCZiI_dA5Khr8MPQCLcBGAsYHQ%2Fs1600%2Flinked-list-programming-interview-questions-5.gif" width="800" height="319"&gt;&lt;/a&gt;&lt;br&gt;
Example of using &lt;b&gt;the generic linked list&lt;/b&gt; from namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Create the link list.&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"the"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"fox"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"jumps"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"over"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"the"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"dog"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="n"&gt;LinkedList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;LinkedList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"The linked list values:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"sentence.Contains(\"jumps\") = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"jumps"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="c1"&gt;// Add the word 'today' to the beginning of the linked list.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddFirst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"today"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 1: Add 'today' to beginning of the list:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Move the first node to be the last node.&lt;/span&gt;
        &lt;span class="n"&gt;LinkedListNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mark1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;First&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveFirst&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddLast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mark1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 2: Move first node to be last node:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Change the last node to 'yesterday'.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveLast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddLast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"yesterday"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 3: Change the last node to 'yesterday':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Move the last node to be the first node.&lt;/span&gt;
        &lt;span class="n"&gt;mark1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Last&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveLast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddFirst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mark1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 4: Move last node to be first node:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Indicate the last occurence of 'the'.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveFirst&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;LinkedListNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindLast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"the"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 5: Indicate last occurence of 'the':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Add 'lazy' and 'old' after 'the' (the LinkedListNode named current).&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"old"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"lazy"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 6: Add 'lazy' and 'old' after 'the':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Indicate 'fox' node.&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"fox"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 7: Indicate the 'fox' node:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Add 'quick' and 'brown' before 'fox':&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"quick"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"brown"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 8: Add 'quick' and 'brown' before 'fox':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Keep a reference to the current node, 'fox',&lt;/span&gt;
        &lt;span class="c1"&gt;// and to the previous node in the list. Indicate the 'dog' node.&lt;/span&gt;
        &lt;span class="n"&gt;mark1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;LinkedListNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mark2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Previous&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dog"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 9: Indicate the 'dog' node:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// The AddBefore method throws an InvalidOperationException&lt;/span&gt;
        &lt;span class="c1"&gt;// if you try to add a node that already belongs to a list.&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Test 10: Throw exception by adding node (fox) already in the list:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mark1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InvalidOperationException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exception message: {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Remove the node referred to by mark1, and then add it&lt;/span&gt;
        &lt;span class="c1"&gt;// before the node referred to by current.&lt;/span&gt;
        &lt;span class="c1"&gt;// Indicate the node referred to by current.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mark1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mark1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 11: Move a referenced node (fox) before the current node (dog):"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Remove the node referred to by current.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 12: Remove current node (dog) and attempt to indicate it:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Add the node after the node referred to by mark2.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mark2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 13: Add node removed in test 11 after a referenced node (brown):"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// The Remove method finds and removes the&lt;/span&gt;
        &lt;span class="c1"&gt;// first node that that has the specified value.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"old"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 14: Remove node that has the value 'old':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// When the linked list is cast to ICollection(Of String),&lt;/span&gt;
        &lt;span class="c1"&gt;// the Add method adds a node to the end of the list.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveLast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;ICollection&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;icoll&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;icoll&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"rhinoceros"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Test 15: Remove last node, cast to ICollection, and add 'rhinoceros':"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Test 16: Copy the list to an array:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Create an array with the same number of&lt;/span&gt;
        &lt;span class="c1"&gt;// elements as the linked list.&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;sArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CopyTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sArray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Release all the nodes.&lt;/span&gt;
        &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Test 17: Clear linked list. Contains 'jumps' = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"jumps"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LinkedList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;IndicateNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LinkedListNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Node '{0}' is not in the list.\n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"("&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;LinkedListNode&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nodeP&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Previous&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nodeP&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nodeP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;nodeP&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nodeP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Previous&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This code example produces the following output:&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;//The linked list values:&lt;/span&gt;
&lt;span class="c1"&gt;//the fox jumps over the dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 1: Add 'today' to beginning of the list:&lt;/span&gt;
&lt;span class="c1"&gt;//today the fox jumps over the dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 2: Move first node to be last node:&lt;/span&gt;
&lt;span class="c1"&gt;//the fox jumps over the dog today&lt;/span&gt;

&lt;span class="c1"&gt;//Test 3: Change the last node to 'yesterday':&lt;/span&gt;
&lt;span class="c1"&gt;//the fox jumps over the dog yesterday&lt;/span&gt;

&lt;span class="c1"&gt;//Test 4: Move last node to be first node:&lt;/span&gt;
&lt;span class="c1"&gt;//yesterday the fox jumps over the dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 5: Indicate last occurence of 'the':&lt;/span&gt;
&lt;span class="c1"&gt;//the fox jumps over (the) dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 6: Add 'lazy' and 'old' after 'the':&lt;/span&gt;
&lt;span class="c1"&gt;//the fox jumps over (the) lazy old dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 7: Indicate the 'fox' node:&lt;/span&gt;
&lt;span class="c1"&gt;//the (fox) jumps over the lazy old dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 8: Add 'quick' and 'brown' before 'fox':&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown (fox) jumps over the lazy old dog&lt;/span&gt;

&lt;span class="c1"&gt;//Test 9: Indicate the 'dog' node:&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown fox jumps over the lazy old (dog)&lt;/span&gt;

&lt;span class="c1"&gt;//Test 10: Throw exception by adding node (fox) already in the list:&lt;/span&gt;
&lt;span class="c1"&gt;//Exception message: The LinkedList node belongs a LinkedList.&lt;/span&gt;

&lt;span class="c1"&gt;//Test 11: Move a referenced node (fox) before the current node (dog):&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown jumps over the lazy old fox (dog)&lt;/span&gt;

&lt;span class="c1"&gt;//Test 12: Remove current node (dog) and attempt to indicate it:&lt;/span&gt;
&lt;span class="c1"&gt;//Node 'dog' is not in the list.&lt;/span&gt;

&lt;span class="c1"&gt;//Test 13: Add node removed in test 11 after a referenced node (brown):&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown (dog) jumps over the lazy old fox&lt;/span&gt;

&lt;span class="c1"&gt;//Test 14: Remove node that has the value 'old':&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown dog jumps over the lazy fox&lt;/span&gt;

&lt;span class="c1"&gt;//Test 15: Remove last node, cast to ICollection, and add 'rhinoceros':&lt;/span&gt;
&lt;span class="c1"&gt;//the quick brown dog jumps over the lazy rhinoceros&lt;/span&gt;

&lt;span class="c1"&gt;//Test 16: Copy the list to an array:&lt;/span&gt;
&lt;span class="c1"&gt;//the&lt;/span&gt;
&lt;span class="c1"&gt;//quick&lt;/span&gt;
&lt;span class="c1"&gt;//brown&lt;/span&gt;
&lt;span class="c1"&gt;//dog&lt;/span&gt;
&lt;span class="c1"&gt;//jumps&lt;/span&gt;
&lt;span class="c1"&gt;//over&lt;/span&gt;
&lt;span class="c1"&gt;//the&lt;/span&gt;
&lt;span class="c1"&gt;//lazy&lt;/span&gt;
&lt;span class="c1"&gt;//rhinoceros&lt;/span&gt;

&lt;span class="c1"&gt;//Test 17: Clear linked list. Contains 'jumps' = False&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2 id="hashtable"&gt;Hashtable&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Hashtable&lt;/b&gt; is a data structure implemented in the &lt;b&gt;.NET Framework&lt;/b&gt; in two ways, simple &lt;b&gt;Hashtable&lt;/b&gt; in the namespace &lt;b&gt;System.Collections&lt;/b&gt; and as generic data structure &lt;b&gt;Dictionary&lt;/b&gt; in &lt;b&gt;System.Collections.Generic&lt;/b&gt; namespace, it is recommended to use Dictionary instead of Hashtable, the working principle of Hashtable and Dictionary is that construct a hash that is index into an array usually using polynomials. Searching in a Hashtable and Dictionary has the complexity of time &lt;b&gt;O(1)&lt;/b&gt;. &lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-Ev3g3OAw7x8/XlkJGYgdg6I/AAAAAAAAHSo/UiWwc1NZPikJAClCrlCUafpcxjVoCDQbgCLcBGAsYHQ/s1600/2671f5ebb8358c5347b9d9e3c65b3d50.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F2.bp.blogspot.com%2F-Ev3g3OAw7x8%2FXlkJGYgdg6I%2FAAAAAAAAHSo%2FUiWwc1NZPikJAClCrlCUafpcxjVoCDQbgCLcBGAsYHQ%2Fs1600%2F2671f5ebb8358c5347b9d9e3c65b3d50.gif" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
Example of using generic &lt;b&gt;Dictionary&lt;/b&gt; from &lt;b&gt;System.Collections.Generic namespace&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Create a new dictionary of strings, with string keys.&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;openWith&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Add some elements to the dictionary. There are no&lt;/span&gt;
&lt;span class="c1"&gt;// duplicate keys, but some of the values are duplicates.&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"notepad.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"bmp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"paint.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dib"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"paint.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"rtf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"wordpad.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The Add method throws an exception if the new key is&lt;/span&gt;
&lt;span class="c1"&gt;// already in the dictionary.&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"winword.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ArgumentException&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"An element with Key = \"txt\" already exists."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// The Item property is another name for the indexer, so you&lt;/span&gt;
&lt;span class="c1"&gt;// can omit its name when accessing elements.&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"For key = \"rtf\", value = {0}."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"rtf"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// The indexer can be used to change the value associated&lt;/span&gt;
&lt;span class="c1"&gt;// with a key.&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"rtf"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"winword.exe"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"For key = \"rtf\", value = {0}."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"rtf"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// If a key does not exist, setting the indexer for that key&lt;/span&gt;
&lt;span class="c1"&gt;// adds a new key/value pair.&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"doc"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"winword.exe"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The indexer throws an exception if the requested key is&lt;/span&gt;
&lt;span class="c1"&gt;// not in the dictionary.&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"For key = \"tif\", value = {0}."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"tif"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KeyNotFoundException&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key = \"tif\" is not found."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// When a program often has to try keys that turn out not to&lt;/span&gt;
&lt;span class="c1"&gt;// be in the dictionary, TryGetValue can be a more efficient&lt;/span&gt;
&lt;span class="c1"&gt;// way to retrieve values.&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryGetValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tif"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"For key = \"tif\", value = {0}."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key = \"tif\" is not found."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ContainsKey can be used to test keys before inserting&lt;/span&gt;
&lt;span class="c1"&gt;// them.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ht"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ht"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"hypertrm.exe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Value added for key = \"ht\": {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"ht"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// When you use foreach to enumerate dictionary elements,&lt;/span&gt;
&lt;span class="c1"&gt;// the elements are retrieved as KeyValuePair objects.&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KeyValuePair&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;kvp&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;openWith&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key = {0}, Value = {1}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;kvp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kvp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// To get the values alone, use the Values property.&lt;/span&gt;
&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueCollection&lt;/span&gt; &lt;span class="n"&gt;valueColl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Values&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The elements of the ValueCollection are strongly typed&lt;/span&gt;
&lt;span class="c1"&gt;// with the type that was specified for dictionary values.&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;valueColl&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Value = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// To get the keys alone, use the Keys property.&lt;/span&gt;
&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;.&lt;/span&gt;&lt;span class="n"&gt;KeyCollection&lt;/span&gt; &lt;span class="n"&gt;keyColl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The elements of the KeyCollection are strongly typed&lt;/span&gt;
&lt;span class="c1"&gt;// with the type that was specified for dictionary keys.&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;keyColl&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key = {0}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Use the Remove method to remove a key/value pair.&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nRemove(\"doc\")"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"doc"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;openWith&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"doc"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key \"doc\" is not found."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/* This code example produces the following output:
An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Key = "tif" is not found.
Key = "tif" is not found.
Value added for key = "ht": hypertrm.exe
Key = txt, Value = notepad.exe
Key = bmp, Value = paint.exe
Key = dib, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe
Key = ht, Value = hypertrm.exe
Value = notepad.exe
Value = paint.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe
Value = hypertrm.exe
Key = txt
Key = bmp
Key = dib
Key = rtf
Key = doc
Key = ht
Remove("doc")
Key "doc" is not found.
*/&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Hashtable applications:&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is used in fast data lookup - the compiler symbol table&lt;/li&gt;
&lt;li&gt;indexing the database&lt;/li&gt;
&lt;li&gt;caches&lt;/li&gt;
&lt;li&gt;unique data representation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, the &lt;b&gt;.NET Framework&lt;/b&gt; contains several data structures optimized for certain problems, the purpose of this article is not to present all data structures from &lt;b&gt;.NET Framework&lt;/b&gt;, I presented only common data structures from courses of algorithms and data structures.&lt;/p&gt;

&lt;h2 id="cautareBinara"&gt;
Binary Search&lt;/h2&gt;

&lt;p&gt;Search algorithms are another topic in the courses of algorithms and data structures, we can use sequential search with &lt;b&gt;O(n)&lt;/b&gt; complexity, or &lt;b&gt;binary search&lt;/b&gt; with &lt;b&gt;O(log n)&lt;/b&gt; complexity if the elements are sorted.&lt;br&gt;
The idea behind binary search is that we access the middle element and compare with the searched one if it is smaller repeats the recursive process for the first half, otherwise it is searching in the second half, the binary search in the &lt;b&gt;.NET Framework&lt;/b&gt; is implemented with &lt;b&gt;Array.BinarySearch&lt;/b&gt;.&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-8p4tjlqWJUA/Xlfp7ZMmXBI/AAAAAAAAHQw/-hwOCmpL-ForYEKgPejMaVgGRfWeCf3agCLcBGAsYHQ/s1600/Binary-Search.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F2.bp.blogspot.com%2F-8p4tjlqWJUA%2FXlfp7ZMmXBI%2FAAAAAAAAHQw%2F-hwOCmpL-ForYEKgPejMaVgGRfWeCf3agCLcBGAsYHQ%2Fs1600%2FBinary-Search.png" width="800" height="445"&gt;&lt;/a&gt;&lt;br&gt;
An example of using &lt;b&gt;binary search&lt;/b&gt; using the &lt;b&gt;Array.BinarySearch&lt;/b&gt; method in the &lt;b&gt;.NET Framework&lt;/b&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="n"&gt;ass&lt;/span&gt; &lt;span class="n"&gt;Program&lt;/span&gt;  
&lt;span class="p"&gt;{&lt;/span&gt;  
    &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="p"&gt;{&lt;/span&gt;  
        &lt;span class="c1"&gt;// Create an array of 10 elements    &lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;IntArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;31&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;  
        &lt;span class="c1"&gt;// Value to search for    &lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;BinarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IntArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Item &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;IntArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s"&gt; found at position &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
        &lt;span class="k"&gt;else&lt;/span&gt;  
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Item not found"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  
    &lt;span class="p"&gt;}&lt;/span&gt;  


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2 id="arboreBinar"&gt;
Binary Search Tree&lt;/h2&gt;

&lt;p&gt;A GitHub repository with custom implementations for most data structures: &lt;a href="https://github.com/aalhour/C-Sharp-Algorithms" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://github.com/aalhour/C-Sharp-Algorithms" rel="noopener noreferrer"&gt;https://github.com/aalhour/C-Sharp-Algorithms&lt;/a&gt;.&lt;br&gt;
I will continue to present a binary search tree. The idea is to have a node root, each node has at most two child nodes, the one on the left is smaller than the root, as well as the left subtree, the right node is larger than the root, so is the right subtree.&lt;br&gt;
Example of binary tree construction:&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-pGiDeTRcsLg/XlkHp31PCWI/AAAAAAAAHSU/50wl0AFRcBcVEnOsWCoQzELZZAkhi_B8gCLcBGAsYHQ/s1600/binary-search-tree-insertion-animation.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-pGiDeTRcsLg%2FXlkHp31PCWI%2FAAAAAAAAHSU%2F50wl0AFRcBcVEnOsWCoQzELZZAkhi_B8gCLcBGAsYHQ%2Fs1600%2Fbinary-search-tree-insertion-animation.gif" width="400" height="255"&gt;&lt;/a&gt;&lt;br&gt;
Searching in a binary search tree has the complexity of time &lt;b&gt;O(log n)&lt;/b&gt; , example of searching in binary tree:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-yVH0ySkTzSc/XlkH1xlGjpI/AAAAAAAAHSY/AAOHTzDFTNMI06I6zi465ENOftos8CVIgCLcBGAsYHQ/s1600/binary-search-tree-sorted-array-animation.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F2.bp.blogspot.com%2F-yVH0ySkTzSc%2FXlkH1xlGjpI%2FAAAAAAAAHSY%2FAAOHTzDFTNMI06I6zi465ENOftos8CVIgCLcBGAsYHQ%2Fs1600%2Fbinary-search-tree-sorted-array-animation.gif" width="450" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Binary search tree traversal:&lt;/b&gt;&lt;br&gt;
&lt;b&gt;Preorder&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Root through&lt;/li&gt;
&lt;li&gt;Go through the left subtree&lt;/li&gt;
&lt;li&gt;Go through the right subtree&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Inorder&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go through the left subtree&lt;/li&gt;
&lt;li&gt;Root through&lt;/li&gt;
&lt;li&gt;Go through the right subtree&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Postorder&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go through the left subtree&lt;/li&gt;
&lt;li&gt;Go through the right subtree&lt;/li&gt;
&lt;li&gt;Root through&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the &lt;b&gt;.NET Framework&lt;/b&gt; , the &lt;b&gt;SortedList&lt;/b&gt; data structure uses internally a &lt;b&gt;binary tree&lt;/b&gt; to keep the sorted elements.&lt;/p&gt;

&lt;h2 id="grafuri"&gt;Graphs&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;The graphs&lt;/b&gt; are data structures characterized by nodes and edges joining the nodes, usually using the notation &lt;b&gt;G = (V, E)&lt;/b&gt; where, V represents the set of nodes (vertices, vertices), and E represents the set of edges (edges), in the programming language is represented by adjacency matrices for example a [i, j] = k, this means that between node i and j we have an edge with weight k, and adjacent lists are also used for their representation.&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-IpYtBbTx2so/XlgW-8pdUZI/AAAAAAAAHRU/yHxOd7zlDssb8Qle7vVxOLbq67n0Y3qWACLcBGAsYHQ/s1600/undirectedgraph.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F1.bp.blogspot.com%2F-IpYtBbTx2so%2FXlgW-8pdUZI%2FAAAAAAAAHRU%2FyHxOd7zlDssb8Qle7vVxOLbq67n0Y3qWACLcBGAsYHQ%2Fs1600%2Fundirectedgraph.png" width="491" height="212"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;b&gt;The graphs&lt;/b&gt; and &lt;b&gt;trees&lt;/b&gt; can also be crossed in &lt;b&gt;breadth(BREADTH FIRST)&lt;/b&gt; with a &lt;b&gt;queue&lt;/b&gt;, &lt;b&gt;depth(DEPTH FIRST)&lt;/b&gt; with a stack.&lt;br&gt;
&lt;a href="https://4.bp.blogspot.com/-Jmkim2LA2Sc/Xlgeg6oMrtI/AAAAAAAAHRg/vopRL-U9cbMGzrjon4_00ov2Sbi5bYuOwCLcBGAsYHQ/s1600/dfsbfs.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F4.bp.blogspot.com%2F-Jmkim2LA2Sc%2FXlgeg6oMrtI%2FAAAAAAAAHRg%2FvopRL-U9cbMGzrjon4_00ov2Sbi5bYuOwCLcBGAsYHQ%2Fs1600%2Fdfsbfs.gif" width="640" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="sorting"&gt;
Sorting Algorithms&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Sorting algorithms&lt;/b&gt; are another topic from the courses of algorithms and data structures, a table with their complexities:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-oTc6mX9YO1c/XlfsQNo8WlI/AAAAAAAAHQ8/6oewcGTWPQAZlYWDT_lvalfi1x-JgoUagCLcBGAsYHQ/s1600/80a161cc62e754af348a85e9f3f56f92d80bb279%2B%25281%2529.png" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2F2.bp.blogspot.com%2F-oTc6mX9YO1c%2FXlfsQNo8WlI%2FAAAAAAAAHQ8%2F6oewcGTWPQAZlYWDT_lvalfi1x-JgoUagCLcBGAsYHQ%2Fs1600%2F80a161cc62e754af348a85e9f3f56f92d80bb279%252B%2525281%252529.png" width="591" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>english</category>
      <category>datastructures</category>
      <category>algorithms</category>
      <category>csharp</category>
    </item>
    <item>
      <title>New feature in Visual Studio 16.6.0 Preview 2, a better integration with Git and GitHub</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Tue, 17 Mar 2020 10:18:29 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/new-feature-in-visual-studio-16-6-0-preview-1-a-better-integration-with-git-and-github-1lmi</link>
      <guid>https://dev.to/adavidoaiei/new-feature-in-visual-studio-16-6-0-preview-1-a-better-integration-with-git-and-github-1lmi</guid>
      <description>&lt;p&gt;In &lt;b&gt;Visual Studio 16.6.0 Preview 2&lt;/b&gt; we have option for new git experience, to activate you should go to &lt;b&gt;Tools &amp;gt; Options &amp;gt; Preview Features&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aKavEVw6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h18od21aeml48cwuonxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aKavEVw6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h18od21aeml48cwuonxa.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After activating this option you should restart Visual Studio, and you will see a new option in Visual Studio menu.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hl1dmlRw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z7w0rhzz28gijvttxa1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hl1dmlRw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z7w0rhzz28gijvttxa1v.png"&gt;&lt;/a&gt;&lt;br&gt;
The Git docked window was updated with redesigned look and feel.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--97ujXkEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1584440236/github2_srtulz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--97ujXkEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1584440236/github2_srtulz.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N1cPIdz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1585660648/Git-Tool-Window-Frame_mcio2q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N1cPIdz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1585660648/Git-Tool-Window-Frame_mcio2q.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sufbdtz2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1585660648/Git-Menu-Frame_fz2jkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sufbdtz2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1585660648/Git-Menu-Frame_fz2jkn.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>visualstudio</category>
      <category>preview</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Structuri de date si algoritmi fundamentali in C#</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Thu, 05 Mar 2020 18:46:15 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/structuri-de-date-si-algoritmi-fundamentali-in-c-18g7</link>
      <guid>https://dev.to/adavidoaiei/structuri-de-date-si-algoritmi-fundamentali-in-c-18g7</guid>
      <description>&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
Stiva (Stack)&lt;br&gt;
Coada (Queue)&lt;br&gt;
Lista Inlatuita (Linked List)&lt;br&gt;
Tablou De Dispersie (Hashtable)&lt;br&gt;
Cautare Binara (Binary Search)&lt;br&gt;
Arbore Binar De Cautare (Binary Search Tree)&lt;br&gt;
Grafuri (Graphs)&lt;/p&gt;

&lt;p&gt;Importanta complexitati algoritmilor este data de faptul ca ne zice daca codul se scaleaza. Majoritatea structurilor de date si a algoritmilor fundamentali sunt deja implementati in &lt;b&gt;.NET Framework&lt;/b&gt;, e important sa stim cum functioneaza aceste structuri de date si ce complexitate de timp, memorie au la operatiile de baza: accesare element, cautare element, stergere element, adaugare element.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://3.bp.blogspot.com/-FKfFL6z0zcI/XlfPWDD-SGI/AAAAAAAAHPk/MQ1l_RovxXgTIJCTReag9FzJRA3TILiYACLcBGAsYHQ/s1600/7365ce00a403fa7605fd2058c80ea65599ce67a2.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6pvyE3WG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://3.bp.blogspot.com/-FKfFL6z0zcI/XlfPWDD-SGI/AAAAAAAAHPk/MQ1l_RovxXgTIJCTReag9FzJRA3TILiYACLcBGAsYHQ/s1600/7365ce00a403fa7605fd2058c80ea65599ce67a2.png"&gt;&lt;/a&gt;&lt;br&gt;
Ca sa ne facem o idee ce inseamna o complexitate buna si una mai putin buna avem urmatorul grafic:&lt;br&gt;
&lt;a href="https://3.bp.blogspot.com/-DnioLTNlg2w/XlfPxIW0RlI/AAAAAAAAHPo/Glbj6UQ7KGA1OumrK_w-1-MArhdtKnuvACLcBGAsYHQ/s1600/8920364de7d83c9b50d5c51a5f385f20b4dd65d4.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ayVbA4g6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://3.bp.blogspot.com/-DnioLTNlg2w/XlfPxIW0RlI/AAAAAAAAHPo/Glbj6UQ7KGA1OumrK_w-1-MArhdtKnuvACLcBGAsYHQ/s1600/8920364de7d83c9b50d5c51a5f385f20b4dd65d4.png"&gt;&lt;/a&gt;&lt;br&gt;
In &lt;b&gt;.NET Framework&lt;/b&gt; avem implementate urmatoarele structuri de date: &lt;b&gt; array, stack, queue, linked list&lt;/b&gt; si algoritmi: &lt;b&gt;cautare binara(binary search)&lt;/b&gt;, restul pe care nu le gasim in &lt;b&gt;.NET Framework&lt;/b&gt; se pot gasi in pachete &lt;b&gt;NuGet&lt;/b&gt; sau pe &lt;b&gt;GitHub&lt;/b&gt;.&lt;br&gt;
&lt;b&gt;Array&lt;/b&gt; este una dintre cele mai folosite si cunoscute structuri de date si nu am sa detaliez cu exemple principiul de functionare.&lt;/p&gt;

&lt;h2 id="stiva"&gt;
Stiva (Stack)&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Stiva (Stack)&lt;/b&gt; este o structura de date implementata in &lt;b&gt;.NET Framework&lt;/b&gt; sub doua forme, stiva simpla in namespace &lt;b&gt;System.Collections&lt;/b&gt;, si stiva ca structura de date generica in namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;, principiul de functionare a structuri stack este &lt;b&gt;LIFO(last in first out)&lt;/b&gt;, ultimul element intrat primul iesit.&lt;br&gt;
&lt;a href="https://3.bp.blogspot.com/-ZTPyluNn8oU/XlkES_014qI/AAAAAAAAHRs/fG18AQEHxAwtzXiM7nKbssA3sl3uPVAtQCLcBGAsYHQ/s1600/0_SESFJYWU5a-3XM9m.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--22DXLpot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://3.bp.blogspot.com/-ZTPyluNn8oU/XlkES_014qI/AAAAAAAAHRs/fG18AQEHxAwtzXiM7nKbssA3sl3uPVAtQCLcBGAsYHQ/s1600/0_SESFJYWU5a-3XM9m.gif"&gt;&lt;/a&gt; &lt;br&gt;
Exemplu de folosire &lt;b&gt;stiva simpla&lt;/b&gt; din namespace &lt;b&gt;System.Collections&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Exemplu de folosire &lt;b&gt;stiva generica&lt;/b&gt; din namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2 id="coada"&gt;
Coada (Queue)&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Coada (Queue)&lt;/b&gt; este o structura de date implementata in &lt;b&gt;.NET Framework&lt;/b&gt; sub doua forme, coada simpla in namespace &lt;b&gt;System.Collections&lt;/b&gt;, si coada ca structura de date generica in namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;, principiul de functionare a structuri queue este &lt;b&gt;FIFO(first in first out)&lt;/b&gt;, primul element intrat primul iesit.&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-N-v_FiIdQXM/XlkFCQQYtPI/AAAAAAAAHR0/zxkuX6WfQS8Y8Mkoj1nHZDWtMOD3MjsUwCLcBGAsYHQ/s1600/0_E33E-AjyAUTFjVmM.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LTu3kVda--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://1.bp.blogspot.com/-N-v_FiIdQXM/XlkFCQQYtPI/AAAAAAAAHR0/zxkuX6WfQS8Y8Mkoj1nHZDWtMOD3MjsUwCLcBGAsYHQ/s1600/0_E33E-AjyAUTFjVmM.gif"&gt;&lt;/a&gt;&lt;br&gt;
Exemplu de folosire &lt;b&gt;coada simpla&lt;/b&gt; din namespace &lt;b&gt;System.Collections&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Exemplu de folosire &lt;b&gt;coada generica&lt;/b&gt; din namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2 id="lista"&gt;
Lista Inlantuita (Linked List)&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Lista Inlantuita (Linked List)&lt;/b&gt; este o structura de date implementata in &lt;b&gt;.NET Framework&lt;/b&gt; ca structura generica in namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;, principiul de functionare a structuri &lt;b&gt;lista inlatuita&lt;/b&gt; este ca fiecare nod din lista are o referinta la nodul urmator, exceptand coada listei care nu are o referinta la urmatorul nod.&lt;br&gt;&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-mycmX6b0ubA/XlkFzTEJdZI/AAAAAAAAHSA/-dlS_xT-Wmoh8qPLWWiNO7Lthu8ByHY0wCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-1.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OKymq1Ar--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://1.bp.blogspot.com/-mycmX6b0ubA/XlkFzTEJdZI/AAAAAAAAHSA/-dlS_xT-Wmoh8qPLWWiNO7Lthu8ByHY0wCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-1.gif"&gt;&lt;/a&gt;&lt;br&gt;
Un exemplu de cautare in lista inlatuita a celui de al treilea element incepand de la sfarsit:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-TFPEI7QYVVQ/XlkGVSEJiZI/AAAAAAAAHSI/M_oTsk9FQeEpkqac8UCZiI_dA5Khr8MPQCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-5.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e9miYLpq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://2.bp.blogspot.com/-TFPEI7QYVVQ/XlkGVSEJiZI/AAAAAAAAHSI/M_oTsk9FQeEpkqac8UCZiI_dA5Khr8MPQCLcBGAsYHQ/s1600/linked-list-programming-interview-questions-5.gif"&gt;&lt;/a&gt;&lt;br&gt;
Exemplu de folosire &lt;b&gt;lista inlatuita generica&lt;/b&gt; din namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2 id="hashtable"&gt;Tablou De Dispersie (Hashtable)&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Tablou De Dispersie (Hashtable)&lt;/b&gt; este o structura de date implementata in &lt;b&gt;.NET Framework&lt;/b&gt; sub doua forme &lt;b&gt;Hashtable&lt;/b&gt; simplu in namespace &lt;b&gt;System.Collections&lt;/b&gt; si &lt;b&gt;Dictionary&lt;/b&gt; ca structura de date generica in namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;, este recomandat sa folosim &lt;b&gt;Dictionary&lt;/b&gt; in loc de &lt;b&gt;Hashtable&lt;/b&gt;, principiul de functionare a structuri &lt;b&gt;Hashtable, Dictionary&lt;/b&gt; este ca se construieste un hash care e index intr-un array de obicei folosind polinoame.&lt;br&gt;
Cautarea intr-un &lt;b&gt;Hashtable, Dictionary&lt;/b&gt; are complexitatea de timp &lt;b&gt;O(1)&lt;/b&gt;.&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-Ev3g3OAw7x8/XlkJGYgdg6I/AAAAAAAAHSo/UiWwc1NZPikJAClCrlCUafpcxjVoCDQbgCLcBGAsYHQ/s1600/2671f5ebb8358c5347b9d9e3c65b3d50.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RNHQqQ96--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://2.bp.blogspot.com/-Ev3g3OAw7x8/XlkJGYgdg6I/AAAAAAAAHSo/UiWwc1NZPikJAClCrlCUafpcxjVoCDQbgCLcBGAsYHQ/s1600/2671f5ebb8358c5347b9d9e3c65b3d50.gif"&gt;&lt;/a&gt;&lt;br&gt;
Exemplu de folosire &lt;b&gt;Dictionary&lt;/b&gt; generic din namespace &lt;b&gt;System.Collections.Generic&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Desigur &lt;b&gt;.NET Framework&lt;/b&gt; contine mai multe structuri de date optimizate pe anumite probleme, scopul acestui articol este sa prezint echivalente la structurile de date implementate in cursurile de algoritmi si structuri de date.&lt;/p&gt;

&lt;h2 id="cautareBinara"&gt;
Cautare Binara (Binary Search)&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Algoritmi de cautare&lt;/b&gt; reprezinta un alt topic din cursurile de algoritmi si structuri de date, putem folosi cautare secventiala cu complexitate &lt;b&gt;O(n)&lt;/b&gt;, sau binara daca elementele sunt sortate cu complexitate &lt;b&gt;O(log n)&lt;/b&gt;. &lt;br&gt;
Ideea din spatele &lt;b&gt;binary search&lt;/b&gt; este ca accesam elementul din mijloc si comparam cu cel cautat daca e mai mic se repeta procesul recursiv pentru prima jumatate, altfel se cauta in a doua jumatate, cautarea binara in &lt;b&gt;.NET Framework&lt;/b&gt; se realizeaza cu &lt;b&gt;Array.BinarySearch&lt;/b&gt;.&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-8p4tjlqWJUA/Xlfp7ZMmXBI/AAAAAAAAHQw/-hwOCmpL-ForYEKgPejMaVgGRfWeCf3agCLcBGAsYHQ/s1600/Binary-Search.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tXvyGQpg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://2.bp.blogspot.com/-8p4tjlqWJUA/Xlfp7ZMmXBI/AAAAAAAAHQw/-hwOCmpL-ForYEKgPejMaVgGRfWeCf3agCLcBGAsYHQ/s1600/Binary-Search.png"&gt;&lt;/a&gt;&lt;br&gt;
Un exemplu de folosire &lt;b&gt;cautare binara&lt;/b&gt; folosind metoda &lt;b&gt;Array.BinarySearch&lt;/b&gt; din &lt;b&gt;.NET Framework&lt;/b&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2 id="arboreBinar"&gt;
Arbore Binar De Cautare (Binary Search Tree)&lt;/h2&gt;

&lt;p&gt;Un repository &lt;b&gt;GitHub&lt;/b&gt; cu implementari custom pentru majoritatea structurilor de date cu cod sursa: &lt;a href="https://github.com/aalhour/C-Sharp-Algorithms"&gt;&lt;/a&gt;&lt;a href="https://github.com/aalhour/C-Sharp-Algorithms"&gt;https://github.com/aalhour/C-Sharp-Algorithms&lt;/a&gt;&lt;br&gt;
Am sa prezint in continuare &lt;b&gt;arbore binar de cautare (binary search tree)&lt;/b&gt; ideea e ca ai un nod radacina, fiecare nod are cel mult doua noduri copii, cel din stanga e mai mic decat radacina, la fel tot subarbore stang, nodul drept este mai mare decat radacina, la fel tot subarbore drept.&lt;br&gt;
Exemplu de construire arbore binar:&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-pGiDeTRcsLg/XlkHp31PCWI/AAAAAAAAHSU/50wl0AFRcBcVEnOsWCoQzELZZAkhi_B8gCLcBGAsYHQ/s1600/binary-search-tree-insertion-animation.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LiGahIUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://1.bp.blogspot.com/-pGiDeTRcsLg/XlkHp31PCWI/AAAAAAAAHSU/50wl0AFRcBcVEnOsWCoQzELZZAkhi_B8gCLcBGAsYHQ/s1600/binary-search-tree-insertion-animation.gif"&gt;&lt;/a&gt;&lt;br&gt;
Cautarea intr-un arbore binar de cautare are complexitatea de timp &lt;b&gt;O(log n)&lt;/b&gt;, exemplu de cautare in arbore binar:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-yVH0ySkTzSc/XlkH1xlGjpI/AAAAAAAAHSY/AAOHTzDFTNMI06I6zi465ENOftos8CVIgCLcBGAsYHQ/s1600/binary-search-tree-sorted-array-animation.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--InEUJ62l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://2.bp.blogspot.com/-yVH0ySkTzSc/XlkH1xlGjpI/AAAAAAAAHSY/AAOHTzDFTNMI06I6zi465ENOftos8CVIgCLcBGAsYHQ/s1600/binary-search-tree-sorted-array-animation.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Metode de parcurgere arbori binari:&lt;/b&gt;&lt;br&gt;
&lt;b&gt;Preordine&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se parcurge rădăcina&lt;/li&gt;
&lt;li&gt;Se parcurge subarborele stâng&lt;/li&gt;
&lt;li&gt;Se parcurge subarborele drept&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Inordine&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se parcurge subarborele stâng&lt;/li&gt;
&lt;li&gt;Se parcurge rădăcina&lt;/li&gt;
&lt;li&gt;Se parcurge subarborele drept&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Postordine&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se parcurge subarborele stâng&lt;/li&gt;
&lt;li&gt;Se parcurge subarborele drept&lt;/li&gt;
&lt;li&gt;Se parcurge rădăcina&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In &lt;b&gt;.NET Framework&lt;/b&gt;, structura de date &lt;b&gt;SortedList&lt;/b&gt; foloseste intern un arbore binar ca sa pastreze elementele sortate.&lt;/p&gt;

&lt;h2 id="grafuri"&gt;Graphs&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Grafurile&lt;/b&gt; sunt structuri de date caracterizate prin noduri si muchii care unesc nodurile, se foloseste de obicei notatia &lt;b&gt;G=(V, E)&lt;/b&gt;&lt;br&gt;
unde, V reprezinta multimea de noduri(varfuri, vertices), si E reprezinta multimea de edges(muchii), in limbajul de programare se reprezinta prin matrice de adiacenta de exemplu a[i, j] = k, asta inseamna ca intre nodul i si j avem o muchie cu pondere k, se mai folosesc si liste de adiacenta pentru reprezentarea lor.&lt;br&gt;
&lt;a href="https://1.bp.blogspot.com/-IpYtBbTx2so/XlgW-8pdUZI/AAAAAAAAHRU/yHxOd7zlDssb8Qle7vVxOLbq67n0Y3qWACLcBGAsYHQ/s1600/undirectedgraph.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GepHOAnf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://1.bp.blogspot.com/-IpYtBbTx2so/XlgW-8pdUZI/AAAAAAAAHRU/yHxOd7zlDssb8Qle7vVxOLbq67n0Y3qWACLcBGAsYHQ/s1600/undirectedgraph.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;b&gt;Grafurile si arbori&lt;/b&gt; pot fi parcursi si in &lt;b&gt;latime(BREADTH FIRST) cu o coada&lt;/b&gt;, &lt;b&gt;adancime(DEPTH FIRST) cu o stiva&lt;/b&gt;.&lt;br&gt;
&lt;a href="https://4.bp.blogspot.com/-Jmkim2LA2Sc/Xlgeg6oMrtI/AAAAAAAAHRg/vopRL-U9cbMGzrjon4_00ov2Sbi5bYuOwCLcBGAsYHQ/s1600/dfsbfs.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WMtV6aa_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://4.bp.blogspot.com/-Jmkim2LA2Sc/Xlgeg6oMrtI/AAAAAAAAHRg/vopRL-U9cbMGzrjon4_00ov2Sbi5bYuOwCLcBGAsYHQ/s1600/dfsbfs.gif"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;b&gt;Algoritmi de sortare&lt;/b&gt; sunt un alt topic din cursurile de algoritmi si structuri de date, un tabel cu complexitatile acestora:&lt;br&gt;
&lt;a href="https://2.bp.blogspot.com/-oTc6mX9YO1c/XlfsQNo8WlI/AAAAAAAAHQ8/6oewcGTWPQAZlYWDT_lvalfi1x-JgoUagCLcBGAsYHQ/s1600/80a161cc62e754af348a85e9f3f56f92d80bb279%2B%25281%2529.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VIq2Vh3l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://2.bp.blogspot.com/-oTc6mX9YO1c/XlfsQNo8WlI/AAAAAAAAHQ8/6oewcGTWPQAZlYWDT_lvalfi1x-JgoUagCLcBGAsYHQ/s1600/80a161cc62e754af348a85e9f3f56f92d80bb279%252B%2525281%252529.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>romanian</category>
      <category>datastructures</category>
      <category>algorithms</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Implementare Least Frequently Used Cache in .NET cu teste unitare si teste de performanta</title>
      <dc:creator>Adavidoaiei Dumitru-Cornel</dc:creator>
      <pubDate>Thu, 05 Mar 2020 18:27:59 +0000</pubDate>
      <link>https://dev.to/adavidoaiei/implementare-least-frequently-used-cache-in-net-cu-teste-unitare-si-teste-de-performanta-35cm</link>
      <guid>https://dev.to/adavidoaiei/implementare-least-frequently-used-cache-in-net-cu-teste-unitare-si-teste-de-performanta-35cm</guid>
      <description>&lt;p&gt;Principiul de functionare la Least Frequently Used Cache este urmatorul: fiecare element din cache pastreaza intr-o variabila numarul de accesari al respectivului element, cand cache-ul depaseste limita maxima se elimina elementul cu numarul minim de accesari, lasand loc unui nou element sa fie adaugat in cache.&lt;/p&gt;

&lt;h2&gt;Implementare Structura de Date&lt;/h2&gt;   

&lt;p&gt;Este nevoie de o structura de date care sa pastreze elementele din cache sortate dupa numarul de accesari, astfel operatia de eliminare a elementului cu numarul minim de accesari sa ruleze in O(log n). Implementarea curenta foloseste un SortedList unde cheia este numarul de accesari iar valoarea este o lista intantuita cu elementele din cache care au acelas numar de accesari. SortedList sorteaza listele inlantuite folosind un arbore binar. Aceasta structura de date permite rulare operatilor de adaugare si accesare elemente din cache in complexitate de timp O(log n)&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--04_FAP3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556623202/binary_tree_linked_list_r9zgzj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--04_FAP3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556623202/binary_tree_linked_list_r9zgzj.jpg"&gt;&lt;/a&gt;&lt;br&gt;
Am creat o interfata generica pe care clasa LFUCache sa o implementeze:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://2.bp.blogspot.com/-o1EGaZhUtRA/XllHftGQK0I/AAAAAAAAHS8/SBp2FP438KEIqj1weGA8hDbMttjKZ8BkgCLcBGAsYHQ/s1600/diagram.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l9FUTWJf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://2.bp.blogspot.com/-o1EGaZhUtRA/XllHftGQK0I/AAAAAAAAHS8/SBp2FP438KEIqj1weGA8hDbMttjKZ8BkgCLcBGAsYHQ/s1600/diagram.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Implementarea clasa LfuCache este sub forma de structura de date generica care implementeaza interfata ICache, permite crearea unui cache care sa stocheze elemente de orice tip, impreuna cu operatiile Add si Get:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Un exemplu de utilizare al clasei LfuCache:&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Acest proiect este publicat pe &lt;a href="https://github.com/adavidoaiei/LeastFrequentlyUsedCache"&gt;GitHub&lt;/a&gt; si ca &lt;a href="https://www.nuget.org/packages/LfuCache"&gt;pachet NuGet&lt;/a&gt;.&lt;br&gt;
Daca vreti sa folositi acest cache in proiectul dumneavoastra il puteti instala ca si pachet NuGet cu urmatoarea comanda din Visual Studio sau din interfata grafica:&lt;br&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;Teste Unitare&lt;/h2&gt;

&lt;p&gt;In scrierea testelor unitare am folosit framework-ul &lt;strong&gt;MSTest&lt;/strong&gt; de la Microsoft, acestea urmeaza pattern-ul Arrange - Act - Assert.&lt;br&gt;
Implementarea testelor unitare:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Testele unitare se pot rula local din Visual Studio &amp;gt; Test Explorer sau ca pas in procesul de integrare continua pe server folosind un serviciu ca si Azure Pipeline.&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TUdrAIgh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556380998/test_explorer_mtmarg.png"&gt;&lt;br&gt;
Un aspect important in testele unitare e code coverage, cat din cod e acoperit de testele unitare, in cazul nostru code coverage este 100%, pentru a masura code coverage se poate folosi local dotCover de la JetBrains.

&lt;h2&gt;Teste de Performanta&lt;/h2&gt;

&lt;p&gt;Pentru testele de performanta am folosit urmatoarea librarie &lt;a href="https://benchmarkdotnet.org/"&gt;PerformanceDotNet&lt;/a&gt;, aceasta masoara timpul de executie si cantitatea de memorie consumata.&lt;br&gt;
Secventa de operatii pe cache de adaugare/accesare este generata aleatoriu intr-un array de operatii de lungime OperationsCount, aceste operatii proceseaza elementele dintr-o lista de dimensiune EelementsCount folosind LFUCache.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Pentru rularea testelor de performanta se poate folosi urmatoarea extensie pentru Visual Studio: &lt;a href="https://github.com/szehetner/BenchmarkDotNet-VS-Runner"&gt;BenchmarkDotNet VS Runner&lt;/a&gt;.&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gXUFovkW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556383301/benchmark_qsx03u.jpg"&gt;&lt;br&gt;
Un exemplu de raport HTML cu rezultatul la benchmark:&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PZgLAsY_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dbvcampra/image/upload/v1556453404/rsz_benchmark_ta0eyl.png"&gt;&lt;br&gt;
&lt;a href="https://benchmarkdotnet.org/"&gt;PerformanceDotNet&lt;/a&gt; poate genera rapoarte cu rezultatele la benchmark in format HTML, CSV, MarkDown GitHub, RPlotExporter(grafic).&lt;br&gt;
Rezultatele la benchmark pot varia in functie de performanta masini pe care se ruleaza testele de performanta, cea mai importanta este performanta procesorului pe care se executa dar mai poate depinde si de runtime daca este .NET Core sau .Net Framework, si de versiunea acestuia.

</description>
      <category>romanian</category>
      <category>algorithms</category>
      <category>datastructure</category>
      <category>lfucache</category>
    </item>
  </channel>
</rss>
