Guest User

Untitled

a guest
Oct 19th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6.  
  7. namespace GenericDatatypeRingbuffer
  8. {
  9. class Ringpuffer<T> : IEnumerable where T : class
  10. {
  11. private Element erster, letzter, current;
  12. private int numberofelements;
  13.  
  14. public class Element
  15. {
  16. internal T data;
  17. internal Element next;
  18.  
  19. internal Element() { }
  20. internal Element(T newdata)
  21. {
  22. data = newdata;
  23. next = null;
  24. }
  25. }
  26.  
  27. public Ringpuffer(int anz)
  28. {
  29. numberofelements = anz;
  30. for (int i = 0; i < anz; i++)
  31. {
  32. Element neu = new Element();
  33.  
  34. if (erster == null)
  35. { erster = neu; letzter = neu; }
  36. else
  37. {
  38. letzter.next = neu;
  39. letzter = neu;
  40. }
  41. }
  42.  
  43. letzter.next = erster;
  44. current = erster;
  45. }
  46.  
  47. public void EnQueue(T newdata, int steps)
  48. {
  49. bool placehere = false;
  50. int moved = 0;
  51. while (!placehere || current.data != default(T))
  52. {
  53. if (moved > numberofelements)
  54. throw new InsufficientMemoryException();
  55.  
  56. current = current.next;
  57. if (moved == steps - 1)
  58. placehere = true;
  59. moved++;
  60.  
  61. }
  62.  
  63. current.data = newdata;
  64. Console.WriteLine("{0} @ {1}", newdata, steps);
  65. }
  66.  
  67. public T DeQueue()
  68. {
  69. T returncache = current.data;
  70. current.data = default(T);
  71. current = current.next;
  72.  
  73. return returncache;
  74. }
  75.  
  76. public IEnumerator GetEnumerator()
  77. {
  78. for (int i = 0; i < numberofelements; i++)
  79. {
  80. if (erster.data != default(T))
  81. yield return erster.data;
  82. erster = erster.next;
  83. }
  84.  
  85. }
  86. }
  87. class Program
  88. {
  89. static void Main(string[] args)
  90. {
  91. Ringpuffer<string> DasDing = new Ringpuffer<string>(5);
  92. DasDing.EnQueue("Anna", 3);
  93. DasDing.EnQueue("lala", 2);
  94. DasDing.EnQueue("lulu", 2);
  95. DasDing.EnQueue("mudda", 2);
  96. DasDing.EnQueue("vadda", 2);
  97. //DasDing.EnQueue("zuvieldesguten", 2);
  98.  
  99. Console.WriteLine();
  100. foreach (string E in DasDing)
  101. {
  102. Console.WriteLine(E);
  103. }
  104.  
  105. Console.WriteLine();
  106. Console.WriteLine("Wurde entfernt: " + DasDing.DeQueue());
  107. Console.WriteLine();
  108.  
  109. foreach (string E in DasDing)
  110. {
  111. Console.WriteLine(E);
  112. }
  113.  
  114.  
  115. Console.WriteLine();
  116.  
  117.  
  118. Console.Read();
  119.  
  120.  
  121.  
  122. }
  123. }
  124. }
Add Comment
Please, Sign In to add comment