Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 11

Очередь стандартными средствами

15.03.2013, 00:06. Показов 2851. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, написать очередь, но не с помощью встроенного класса Queue, а стандартными средствами.
Вот класс элемента очереди:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Element
    {
        int data;
        Element element;//Вот эти строчки
        Element next;//я не понимаю - в чем их функция?  
 
        internal Element Next
        {
            get { return next; }
            set { next = value; }
        }
 
        public int Data
        {
            get { return data; }
            set { data = value; }
        }
Класс самой очереди:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Queue 
    {
        Element head = null;//это ссылки на начало и конец очереди?
        Element tail = null;
 
        //Вот самый важный вопрос: как работает метод Add?
        public void Add(int a) {
            if (tail == null)
            {
                Element x = new Element();
                x.Data = a;
                head = x;
                tail = x;
            } else
            {
                Element x = new Element();
                //Что тут писать, я не знаю...
            }
        }
    }
Реализация очереди:
C#
1
2
3
4
5
6
7
8
9
10
11
class Class1
    {
        static void Main(string[] args)
        {
            Queue x = new Queue();
            x.Add(1);
            x.Add(2);
            x.Add(3);
            //Как здесь реализовать просмотр элементов очереди?
        }
    }

И еще: не понимаю, как расположены вообще друг относительно друга элементы очереди? Они находятся рядом, или как-то вложены друг в друга?

Извините за нубские вопросы. Надеюсь на вашу помощь.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 00:06
Ответы с готовыми решениями:

Асимметричное шифрование с открытым и закрытым ключом (эцп) стандартными средствами
Есть ли в стандартных библиотеках инструменты для такого шифрования ?

Работа со стандартными системами счисления
Есть алгоритм перевода уже введенных в определенной сс чисел в десятичную. // Функция заменяет буквы на числа и наоборот ...

Как подключить WI-FI не стандартными средствами?
Добрый день! Как мне WI-FI подключить например через командную строку, или запустив где-нибудь один файл?

6
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.03.2013, 00:19
http://ru.wikipedia.org/wiki/F... A%D0%B0%29
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.03.2013, 00:33
Это реализация на связном списке
http://ru.wikipedia.org/wiki/%... A%D0%B0%29
C#
1
2
        Element element;//Вот эти строчки
        Element next;//я не понимаю - в чем их функция?
Первая строчка - бесполезная.
Вторая - указатель на следующий элемент, гуглите про реализацию связных списков на указателях. Если коротко: каждый элемент знает об одном своем соседе, в итоге имея указатель (ну или "ссылку", говоря терминами C#) на самый первый элемент можно пройти по всему списку, пока не найдется элемент, за которым никого нет.

Добавлено через 9 минут
Wingman, вот простенький пример, как очередь должна выглядеть (параметр T означает, что в очередь мы можем запихнуть любые данные, очередь от этого не меняется. Конкретный тип данных указывается при создании в скобочках <int>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections;
using System.Collections.Generic;
 
namespace ConsoleApplication5
{
    class Program
    {
        static void Main()
        {
            var queue = new MyQueue<int>();
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            foreach (int i in queue)
                Console.WriteLine(i);
            Console.ReadKey();
        }
    }
 
    class MyQueue<T> : IEnumerable<T>
    {
        private class Element
        {
            public T Data { get; set; }
            public Element Next { get; set; }
 
            public Element(T data)
            {
                Data = data;
            }
        }
 
        private Element head, tail;
        public void Enqueue(T data)
        {
            var newelm = new Element(data);
            if (head == null)
                head = tail = newelm; //Голова и хвост указывают на единственный элемент очереди
            else
            {
                tail.Next = newelm; //Перекинули с предпоследнего указатель на последний
                tail = newelm;  //Теперь хвост указывает на последний элемент
            }
        }
 
        public T Dequeue()
        {
            if (head == null)
                throw new NullReferenceException(); //Если список пустой, то генерируем исключение при попытке извлечь элемент
            var data = head.Data;
            head = head.Next;
            return data;
        }
 
        public IEnumerator<T> GetEnumerator()
        {
            for (Element element = head; element != null; element = element.Next)
                yield return element.Data;
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}
Коротко о коде: в очереди принято называть добавление в очередь - Enqueue, извлечение - Dequeue, последние 2 метода являются реализацией, позволяющей нам использовать foreach для прохода по коллекции.
2
1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 11
15.03.2013, 17:06  [ТС]
Спасибо огромное, почти все понял. А можно поподробнее про 2 последних метода класса myQueue?


А, вот еще: подчеркивает синим первое слово метода GetEnumerator

C#
1
2
3
4
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
и выдает ошибку при компиляции:

"Использование универсального тип "System.Collections.Generic.IEnumerator< T>" требует аргументы типа "1"


С чем это может быть связано?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.03.2013, 20:51
Wingman, ну не знаю, у меня все скомпилировалось без ошибок, тем более, что два последних метода я генерировал встроенными средствами, руками не писал, так что ошибок в нем тем более быть не должно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.03.2013, 20:54
Вы точно все скопировали правильно? В частности юзинги?
C#
1
2
3
using System;
using System.Collections;
using System.Collections.Generic;
Ну для полноты картины держите проект целиком:
Вложения
Тип файла: rar ConsoleApplication5.rar (26.6 Кб, 31 просмотров)
0
1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 11
15.03.2013, 23:20  [ТС]
У меня была пропущена строка
using System.Collections;
Теперь все работает. Psilon, спасибо большое еще раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2013, 23:20
Помогаю со студенческими работами здесь

Работа с БД SQLlite стандартными средствами C#
Собственно есть тулза, состоящая из одного исполняемого файла. С недавних пор, понадобилась внести в ее функционал возможность считывать...

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

Архивация стандартными средствами Windows
Помогите написать bat файл для архивации папки,файла через встроенный архиватор windows 7, т.е имеется папка C:\Data надо заархиваровать...

Ajax авторизация стандартными средствами
Пытаюсь переделать на ajax стандартный метод авторизации asp.net mvc. Не передается &quot;ValidateAntiForgeryToken&quot; (метаданное на...

Архивация данных на сервере стандартными средствами
Всем привет подскажите можно как то сделать архивацию через стандартную архивацию на сервере 2012 чтобы он жесткий диск не скрывал ? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru