desislava_topuzakova

ReversedList

May 30th, 2021
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace demo
  8. {
  9. class ReversedList
  10. {
  11. private const int DefaultCapacity = 2;
  12. private const int DefaultExtendMultiplier = 2;
  13.  
  14.  
  15. private object[] elements;
  16. private object[] reversedElements;
  17. private int count;
  18. public int Capacity { get; set; }
  19.  
  20. public ReversedList()
  21. {
  22. this.elements = new object[0];
  23. this.reversedElements = new object[0];
  24. this.count = 0;
  25. Capacity = 0;
  26. }
  27.  
  28. public object this[int index]
  29. {
  30. get { return reversedElements[index]; }
  31. set { reversedElements[index] = value; }
  32. }
  33.  
  34. public int Count
  35. {
  36. get { return count; }
  37. }
  38.  
  39. public void Add(object obj)
  40. {
  41. if (count == 0)
  42. {
  43. elements = new object[DefaultCapacity];
  44. Capacity = DefaultCapacity;
  45. }
  46. else if (count == Capacity)
  47. {
  48. ExtendElementsContainer();
  49. }
  50.  
  51. elements[count] = obj;
  52. count++;
  53.  
  54. reversedElements = getReversed(elements);
  55. }
  56.  
  57. public void RemoveAt(int index)
  58. {
  59. reversedElements = getReversed(elements);
  60. if (index < 0 || index >= reversedElements.Length)
  61. {
  62. throw new ArgumentOutOfRangeException("Argument is out of range");
  63. }
  64.  
  65. for (int i = index; i < count; i++)
  66. {
  67. reversedElements[i] = reversedElements[i + 1];
  68. }
  69. reversedElements[count] = null;
  70. count--;
  71. }
  72.  
  73. private void ExtendElementsContainer()
  74. {
  75. var newContainer = new object[elements.Length * DefaultExtendMultiplier];
  76. Capacity = newContainer.Length;
  77.  
  78. for (int i = 0; i < elements.Length; i++)
  79. {
  80. newContainer[i] = elements[i];
  81. }
  82.  
  83. elements = newContainer;
  84. }
  85.  
  86. private object[] getReversed(object[] elements)
  87. {
  88. //[1, 3, 4, 7] -> [7, 4, 3, 1]
  89. object[] reversed = new object[elements.Length];
  90. int indexReversed = 0;
  91. for (int i = elements.Length - 1; i >= 0; i--)
  92. {
  93. object currentElement = elements[i];
  94. reversed[indexReversed] = currentElement;
  95. indexReversed++;
  96. }
  97.  
  98. return reversed;
  99. }
  100. }
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment