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

Создать класс, позволяющий работать с односвязным списком

09.09.2012, 11:56. Показов 4713. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста хотя бы что-то =)
Создать класс, позволяющий работать с односвязным списком.
Реализовать в классе методы:
  • Конструктор с одним параметром (число);
  • конструктор с двумя параметрами (число, ссылка на следующий элемент);
  • метод добавления нового элемента в список после элемента с заданным значением;
  • рекурсивный метод добавления нового элемента последним в список;
  • не рекурсивный метод удаления последнего в списке элемента;
  • метод удаления всех четных по порядку элементов;
  • рекурсивный метод распечатки всех нечетных значений элементов списка;
  • метод сортировки элементов списка по возрастанию числовых значений;
  • свойство length - длина списка (при считывании – вернуть длину списка, при записи – установить длину списка, добавив недостающие элементы со значением 0 или отсекая лишние элементы);
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2012, 11:56
Ответы с готовыми решениями:

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

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

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

Создать класс для работы с односвязным списком (без использования коллекций)
Задание: Создать класс для работы с односвязным списком (без использования коллекций). Класс должен...

3
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
09.09.2012, 14:06 2
Пункт номер 1.
C#
1
2
3
4
5
6
7
8
9
10
public class MyLinkedList
{
   private MyLinkedList next;
   private int value;
 
   public MyLinkedList(int value)
   {
      this.value = value;
   }
}
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 16:39 3
Алёсенька, примерно так:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
using System.Collections;
using System.Collections.Generic;
 
 
namespace LinkedList
{
    internal class LinkedList : IEnumerable<int>
    {
        internal class ListElm
        {
            public int Value { get; set; }
            public ListElm Next { get; set; }
 
 
            public ListElm(int value)
            {
                Value = value;
                Next = null;
            }
 
 
            public ListElm(int value, ListElm next)
                : this(value)
            {
                Next = next;
            }
 
 
            public static bool operator <(ListElm lhs, ListElm rhs)
            {
                return lhs.Value < rhs.Value;
            }
 
 
            public static bool operator >(ListElm lhs, ListElm rhs)
            {
                return rhs < lhs;
            }
 
 
            public static bool operator <=(ListElm lhs, ListElm rhs)
            {
                return lhs.Value <= rhs.Value;
            }
 
 
            public static bool operator >=(ListElm lhs, ListElm rhs)
            {
                return rhs <= lhs;
            }
        }
 
 
        private ListElm _headPtr;
        private ListElm _tailPtr;
        public int Length
        {
            get
            {
                var tempPtr = _headPtr;
                int i;
                for (i = 0; tempPtr != null; i++, tempPtr = tempPtr.Next) ;
                return i;
            }
        }
 
 
        public void Add(int value, int insertAfterThis)
        {
            var newElm = new ListElm(value, null);
            if (_headPtr == null)
                _headPtr = _tailPtr = newElm;
            else
            {
                ListElm tempPtr;
                for (tempPtr = _headPtr; tempPtr.Next != null && tempPtr.Next < _headPtr; tempPtr = tempPtr.Next) ;
                newElm.Next = tempPtr.Next;
                tempPtr.Next = newElm;
                if (newElm.Next == null)
                    _tailPtr = newElm;
            }
        }
 
 
        public void Add(int value)
        {
            var newElm = new ListElm(value, null);
            if (_headPtr == null)
                _headPtr = _tailPtr = newElm;
            else
            {
                _tailPtr.Next = newElm;
                _tailPtr = newElm;
            }
        }
 
 
        public bool RemoveLast()
        {
            if (_headPtr == null) return false;
            var remove = _headPtr;
            while (remove.Next != _tailPtr)
                remove = remove.Next;
            remove.Next = null;
            _tailPtr = remove;
            return true;
        }
 
 
        public bool RemoveEven()
        {
            if (Length < 2) return false;
            for (var tempPtr = _headPtr; tempPtr.Next != null; tempPtr = tempPtr.Next)
                tempPtr.Next = tempPtr.Next.Next;
            return true;
        }
 
 
        public string RecursiveOddPrint()
        {
            string result = "";
            if (_headPtr == null) return result;
            result = PrivateRecursiveOddPrint(_headPtr);
            return result;
        }
 
 
        private string PrivateRecursiveOddPrint(ListElm ptr)
        {
            if (ptr == null) return "";
            string result = ptr.Value + "\r\n";
            return ptr.Next == null ? result : result + PrivateRecursiveOddPrint(ptr.Next.Next);
        }
 
        private void Swap(ListElm a, ListElm b)
        {
            int c = a.Value;
            a.Value = b.Value;
            b.Value = c;
        }
 
        public void Sort()
        {
            bool flag = true;
            while (flag)
            {
                flag = false;
                for (var tempPtr = _headPtr; tempPtr.Next != null; tempPtr = tempPtr.Next)
                {
                    if (tempPtr < tempPtr.Next) continue;
                    Swap(tempPtr, tempPtr.Next);
                    flag = true;
                }
            }
        }
 
        public IEnumerator<int> GetEnumerator()
        {
            for (var tempPtr = _headPtr; tempPtr != null; tempPtr = tempPtr.Next)
                yield return tempPtr.Value;
        }
 
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}
Пользоваться так:
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
using System;
 
 
namespace LinkedList
{
    class Program
    {
        static void Main()
        {
            var list = new LinkedList();
            list.Add(5);
            list.Add(4);
            list.Add(3);
            list.Add(2);
            list.Add(1);
            foreach (var v in list)
                Console.WriteLine(v);
            list.Sort();
            foreach (var v in list)
                Console.WriteLine(v);
            Console.ReadKey();
        }
    }
}
Не делал только рекурсивного добавления в конце списка, сделал обычный цикл.
1
Алёсенька
09.09.2012, 23:35 4
Спасибо огромнейшее!!!
09.09.2012, 23:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2012, 23:35
Помогаю со студенческими работами здесь

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

Класс полином с односвязным списком
Помогите,пожалуйста, Написал класс Полином с односвязным списком,нужно создать...

Класс для работы с односвязным списком
Построить класс для работы с односвязным списком. Создать два списка: List1 и List2. Проверить,...

Построить класс для работы с односвязным списком
Доброго времени суток, очень давно не обращался на ваш форум и вот снова прошу помощи. ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru