Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
57 / 57 / 15
Регистрация: 22.09.2011
Сообщений: 319

Работа с динамической памятью

08.10.2011, 23:07. Показов 5852. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, был в пятницу на собеседовании
Задали такой вопрос - написать программму, которая бы создавала динамический список, то есть можно было удалять \ добавлять цело число к списку в любую позицию. При этом нельзя пользоваться массивами и встроенными возможностями C# - типа List
Я сделал, но через велосипед
Подскажите пожалуйста - как можно решить жту задачу легко и изящно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2011, 23:07
Ответы с готовыми решениями:

Работа с памятью
Захватить один кусок памяти размером N Кбайт. Заполнить его нулями. Захватить другой кусок памяти размером M Кбайт памяти и записать туда...

Работа с памятью
Помогите, как произвести подсчет памяти которая занята переменными.

BitmapImage-работа с памятью
Вот решил написать для практики простенький просмотрщик изображений с помощью C# WPF. Картина такая: в TreeView пользователь выбирает...

13
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2011, 00:38
List - это возможности .NET
Не пользоваться массивами - это делать что-то вроде LinkedList'a чтоли?
Ну и не совсем по теме: собеседование при приеме на работу было?
0
57 / 57 / 15
Регистрация: 22.09.2011
Сообщений: 319
09.10.2011, 01:04  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
List - это возможности .NET
Не пользоваться массивами - это делать что-то вроде LinkedList'a чтоли?
Ну и не совсем по теме: собеседование при приеме на работу было?
Ага - при приёме на работу, по ASP.net
Был выбор - либо на C# либо на С++ на листочке написать ршение задачи
0
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
09.10.2011, 01:09
Цитата Сообщение от ansi_str Посмотреть сообщение
При этом нельзя пользоваться массивами
интересн , а как без них? Покажите как делали , вот мой велосипед
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
using System;
 
namespace ConsoleApplication1
{
    public class MyList
    {
        string value;
        public MyList()
        {
            value = "";
        }
        public void Add(int value)
        {
            this.value += value+",";
        }
 
        public void Add(int value, int index)
        {
            int insertIndex=0;
            int end;
            int count =0;
            for (int i = 0; i < this.value.Length; i++)
            {
                if (this.value[i] == ',') count++;
                if (count == index - 1) insertIndex = i+1;
                if (insertIndex != 0)
                {
                    end = i;
                    break;
                }
            }
           this.value = this.value.Insert(insertIndex, value + ",");
        }
        public void Print()
        {
            Console.WriteLine(this.value);
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            MyList list = new MyList();
            list.Print();
 
            list.Add(5); //добавили первое 
            list.Add(53);
            list.Add(2);
            list.Print();
 
            list.Add(1, 2);//добавили 1 на место второго числа
            list.Print();
 
            Console.ReadKey();
        }
    }
}
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
09.10.2011, 01:16
Строку тоже можно посчитать массивом. Скорее всего, хотели, чтоб Вы воспользовались указателями и с их помощью построили список.
2
57 / 57 / 15
Регистрация: 22.09.2011
Сообщений: 319
09.10.2011, 09:34  [ТС]
Цитата Сообщение от body90 Посмотреть сообщение
Строку тоже можно посчитать массивом. Скорее всего, хотели, чтоб Вы воспользовались указателями и с их помощью построили список.
Да, именно так
Я делала класс с двумя полями, первое поле - значение в списке, второе это порядковый номер в списке элемента. Cоздавал обьект конструктором - создал элемент, захотел удалть элемент - вызвал диструктор обьекта.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
09.10.2011, 13:34
Цитата Сообщение от ansi_str Посмотреть сообщение
программму, которая бы создавала динамический список, то есть можно было удалять \ добавлять цело число к списку в любую позицию. При этом нельзя пользоваться массивами и встроенными возможностями C# - типа List
Проходил такую тему на первом курсе:
Элемент односвязного списка
C#
1
2
3
4
5
6
7
8
9
10
11
sealed class Item<T>
{
    public Item(T value, Item<T> next)
    {
        this.Value = value;
        this.Next = next;
    }
 
    public T Value { get; set; }
    public Item<T> Next { get; set; }
}

Односвязный список (обрезанный функционал)
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
using System;
using System.Collections;
 
sealed class List<T> : IEnumerable
{
    Item<T> head;
 
    public int Count { private set; get; }
 
    public void Add(T value)
    {
        head = new Item<T>(value, head);
        Count++;
    }
    public void Insert(int index, T value)
    {
        Item<T> item = GetItem(index);
        item.Next = new Item<T>(value, item.Next);
        Count++;
    }
    public void RemoveAt(int index)
    {
        Item<T> item = GetItem(index);
        if (item.Next == null)
            item = null;
        else
        {
            item.Value = item.Next.Value;
            item.Next = item.Next.Next;
        }
        Count--;
    }
 
    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < Count; i++)
            yield return GetItem(i).Value;
    }
 
    private Item<T> GetItem(int index)
    {
        if (index < 0 || index >= Count)
            throw new Exception("Выход за границы списка.");
 
        Item<T> item = head;
        for (index = Count - index - 1; index > 0; index--)
            item = item.Next;
        return item;
    }
}

Использование
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
 
class Program
{
    public static void Main()
    {
        List<int> list = new List<int>();
        list.Add(1);
        list.Add(2);
        list.Add(3);
        list.Add(4);
        list.Insert(2, 5);
        list.RemoveAt(1);
        foreach (int i in list)
            Console.WriteLine(i);
    }
}

Реализация конечно простенькая, сейчас бы уже не так написал.

Цитата Сообщение от body90 Посмотреть сообщение
Скорее всего, хотели, чтоб Вы воспользовались указателями и с их помощью построили список.
C# - это не C++ и использовать указатели - плохая практика.
1
57 / 57 / 15
Регистрация: 22.09.2011
Сообщений: 319
09.10.2011, 13:55  [ТС]
В C# то же можно указателями пользоваться
Вот этим как раз польховаться и нельзя List<T>
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
09.10.2011, 14:19
ansi_str, я же вроде понятно мысли выражаю.

Цитата Сообщение от ansi_str Посмотреть сообщение
В C# то же можно указателями пользоваться
Можно, но не нужно.

Цитата Сообщение от ansi_str Посмотреть сообщение
Вот этим как раз польховаться и нельзя List<T>
Вообще-то это мой самостоятельно созданный класс и его полный путь [Имя проекта].List<T>. В то время как полный путь к тому, что нельзя использовать [Имя проекта].System.Collections.Generic.List<T>.
Прежде чем что-то утверждать, стоит пару раз подумать.
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
09.10.2011, 17:28
Цитата Сообщение от Blood-Angel Посмотреть сообщение
C# - это не C++ и использовать указатели - плохая практика.
В итоге, мы храним ссылку на следующий элемент списка, хотя этого и не видим.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
09.10.2011, 18:17
Цитата Сообщение от body90 Посмотреть сообщение
В итоге, мы храним ссылку на следующий элемент списка, хотя этого и не видим.
Может стоит сперва уяснить разницу между указателем и ссылкой?

P.S. Я могу этот же список, реализованный выше, сделать через указатели, но геморроя будет значительно больше.
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
09.10.2011, 19:17
Спасибо за ссылки, но по ним нас посылали еще на первом курсе.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
09.10.2011, 19:31
body90, ладно, я сдаюсь. Считай как знаешь - мне все равно.
0
09.10.2011, 22:09

Не по теме:

Я всего лишь оговорился.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2011, 22:09
Помогаю со студенческими работами здесь

Работа с памятью
Как можно &quot;выделить&quot; и освободить память? нужно 2-мя способами: с помощью Си шарпа и с помощью апи функций, помогите плз

Работа с памятью
Переместить массив размерностью 16 ячеек из области памяти с начальным адресом 900 в область памяти с начальным адресом А00, изменив...

Работа с памятью
Есть приложение, которое запускает другое приложение. Нужно чтобы приложение 1 получило от приложения 2 какие-то данные (1 раз). Ни какой...

Работа с памятью
Всем добрый день. У меня появился такой вопрос: Предположим, есть такой код: AnotherObj GetAO() { SomethingObj A = new...

Работа с памятью
Здравствуйте. Прошу скинуть любые примеры записи/чтения/редактирования данных из/в память. Заранее спасибо. :)


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru