Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace demo
- {
- class ReversedList
- {
- private const int DefaultCapacity = 2;
- private const int DefaultExtendMultiplier = 2;
- private object[] elements;
- private object[] reversedElements;
- private int count;
- public int Capacity { get; set; }
- public ReversedList()
- {
- this.elements = new object[0];
- this.reversedElements = new object[0];
- this.count = 0;
- Capacity = 0;
- }
- public object this[int index]
- {
- get { return reversedElements[index]; }
- set { reversedElements[index] = value; }
- }
- public int Count
- {
- get { return count; }
- }
- public void Add(object obj)
- {
- if (count == 0)
- {
- elements = new object[DefaultCapacity];
- Capacity = DefaultCapacity;
- }
- else if (count == Capacity)
- {
- ExtendElementsContainer();
- }
- elements[count] = obj;
- count++;
- reversedElements = getReversed(elements);
- }
- public void RemoveAt(int index)
- {
- reversedElements = getReversed(elements);
- if (index < 0 || index >= reversedElements.Length)
- {
- throw new ArgumentOutOfRangeException("Argument is out of range");
- }
- for (int i = index; i < count; i++)
- {
- reversedElements[i] = reversedElements[i + 1];
- }
- reversedElements[count] = null;
- count--;
- }
- private void ExtendElementsContainer()
- {
- var newContainer = new object[elements.Length * DefaultExtendMultiplier];
- Capacity = newContainer.Length;
- for (int i = 0; i < elements.Length; i++)
- {
- newContainer[i] = elements[i];
- }
- elements = newContainer;
- }
- private object[] getReversed(object[] elements)
- {
- //[1, 3, 4, 7] -> [7, 4, 3, 1]
- object[] reversed = new object[elements.Length];
- int indexReversed = 0;
- for (int i = elements.Length - 1; i >= 0; i--)
- {
- object currentElement = elements[i];
- reversed[indexReversed] = currentElement;
- indexReversed++;
- }
- return reversed;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment