1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 11

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

15.03.2013, 00:06. Показов 2878. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru