четверг, 18 октября 2012 г.

Реализация структуры данных "Очередь"

Настало время взять клавиатуру в руки и написать что-нибудь серьезное. Шучу, конечно. На этот раз речь пойдет о такой структуре данных, как очередь. 


Очередь - структура данных, которая устроена таким образом, что данные добавляются всегда в начало, а удаляются с конца. Иными словами, это тип данных, построенный по принципу ПЕРВЫЙ ПРИШЕЛ - ПОСЛЕДНИЙ УШЕЛ (FIFO - FIRST IN, FIRST OUT).

Звучит, может быть, заумно, но реализация достаточно тривиальна. И так, засучив рукава и налив кружечку чая, начнем-с...

Нам потребуются методы, позволяющие добавлять элемент, удалять элемент из очереди, а так же реализуем очень полезные методы, позволяющие получить последний элемент и общее количество элементов в очереди.

Реализация будет производиться на языке C#, будем использовать ArrayList, поэтому не забудьте подключить пространство имен System.Collections. Конструктор будет выглядеть достаточно аскетично, так как будет служить лишь одной цели: созданию объекта ArrayList. Сразу приведем его код:


        private ArrayList queue;

        public Queue()
        {
            this.queue = new ArrayList();
        }


Дальше - круче. Реализуем методы для добавления и удаления элементов. Не будем изобретать велосипед и воспользуемся стандартными методами, которые любезно предоставит нам класс ArrayList:

        public void AddElement(object element)
        {
            this.queue.Add(element);
        }

        public void RemoveElement()
        {
            this.queue.RemoveAt(0);
        }


Теперь, немного отдохнув от столь напряженного дикого кодинга, займемся реализацией методов, расширяющих функционал нашего класса.

        //для получения первого элемента в очереди
        public object GetFirstElement()
        {
            return this.queue[0];
        }
        

        //для получения последнего элемента очереди
        public object GetLastElement()
        {
            return this.queue[queue.Count - 1];
        }



        //для получения общего количества элементов в очереди
        public int Count()
        {
            return this.queue.Count;
        }


Как вы могли уже заметить, мы нагло эксплуатируем класс ArrayList и его методы. Если бы реализовывали бы данный класс при помощи обычных массивов, то было бы немного посложнее. 

Напоследок,приведем весь код нашей очереди:

using System;
using System.Collections;

namespace Queue
{
    public class Queue
    {
        private ArrayList queue;

        public Queue()
        {
            this.queue = new ArrayList();
        }

        public void AddElement(object element)
        {
            this.queue.Add(element);
        }

        public void RemoveElement()
        {
            this.queue.RemoveAt(0);
        }

        public object GetFirstElement()
        {
            return this.queue[0];
        }

        public object GetLastElement()
        {
            return this.queue[queue.Count - 1];
        }

        public int Count()
        {
            return this.queue.Count;
        }
    }
}

Комментариев нет:

Отправить комментарий