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

Добавление элемента в середину списка

10.03.2019, 10:18. Показов 3976. Ответов 4
Метки нет (Все метки)

Подскажите как реализовать добавление элемента не в конец списка, а в какую то позицию списка, и еще добавить функцию поиска и прохода элемента?
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
struct Element
{
    // Данные
    char data;
    // Адрес следующего элемента списка
    Element * Next;
};
 
// Односвязный список
class List
{
    // Адрес головного элемента списка
    Element * Head;
    // Адрес головного элемента списка
    Element * Tail;
    // Количество элементов списка
    int Count;
 
public:
    // Конструктор
    List();
    // Деструктор
    ~List();
 
    // Добавление элемента в список
    // (Новый элемент становится последним)
    void Add(char data);
    //node* slist_insert(slist* ls, node* p, int val);
    // Удаление элемента списка
    // (Удаляется головной элемент)
    void Del();
    // Удаление всего списка
    void DelAll();
 
    // Распечатка содержимого списка
    // (Распечатка начинается с головного элемента)
    void Print();
 
    // Получение количества элементов, находящихся в списке
    int GetCount();
};
 
List::List()
{
    // Изначально список пуст
    Head = Tail = NULL;
    Count = 0;
}
 
List::~List()
{
    // Вызов функции удаления
    DelAll();
}
 
int List::GetCount()
{
    // Возвращаем количество элементов
    return Count;
}
 
 
void List::Add(char data)
{
    // создание нового элемента
    Element * temp = new Element;
 
    // заполнение данными
    temp->data = data;
    // следующий элемент отсутствует
    temp->Next = NULL;
    // новый элемент становится последним элементом списка
    // если он не первый добавленный
    if (Head != NULL) {
        Tail->Next = temp;
        Tail = temp;
    }
    // новый элемент становится единственным
    // если он первый добавленный
    else {
        Head = Tail = temp;
    }
}
 
void List::Del()
{
    // запоминаем адрес головного элемента
    Element * temp = Head;
    // перебрасываем голову на следующий элемент
    Head = Head->Next;
    // удаляем бывший головной элемент
    delete temp;
}
 
void List::DelAll()
{
    // Пока еще есть элементы
    while (Head != 0)
        // Удаляем элементы по одному
        Del();
}
 
void List::Print()
{
    // запоминаем адрес головного элемента
    Element * temp = Head;
    // Пока еще есть элементы
    while (temp != 0)
    {
        // Выводим данные
        cout << temp->data << " ";
        // Переходим на следующий элемент
        temp = temp->Next;
    }
 
    cout << "\n\n";
}
 
// Тестовый пример
void main()
{
    // Создаем объект класса List
    List lst;
    
    // Тестовая строка
    char s[] = "Hello, World !!!";
    // Выводим строку
    cout << s << "\n\n";
    // Определяем длину строки
    int len = strlen(s);
    // Загоняем строку в список
    for (int i = 0; i < len; i++)
        lst.Add(s[i]);
    // Распечатываем содержимое списка
    lst.Print();
    cout << "Dobavlenie\n";
    char s1[] = "";
    cin >> s1;
    int len1 = strlen(s1);
    // Загоняем строку в список
    for (int i = 0; i < len1; i++)
        lst.Add(s1[i]);
    lst.Print();
    // Удаляем три элемента списка
    cout << "Delete\n";
    lst.Del();
    lst.Del();
    lst.Del();
    //Распечатываем содержимое списка
    lst.Print();
    system ("pause");
}
Добавлено через 37 минут
Точнее только поиск
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2019, 10:18
Ответы с готовыми решениями:

Добавление элемента в середину списка
на данный момент реализована функция добавления в конец списка void addToList (char data) { List...

Списки. Функции добавление списка в конец и в середину другого списка.
Всем привет!) Я вот написал две функции, 1- добавляется список2 в середину списка1, а 2 - добавляет...

Добавление и удаление элементов в середину списка
Доброго всем времени суток!! Есть прога добавления и удаления элементов в списке, из начала, конца....

Добавление элемента в конец списка
Решил перегрузить функцию добавления элемента, чтоб пользователь мог выбрать куда добавить новый...

4
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
10.03.2019, 10:57 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int find(char pValue)
{       
    if (Head == NULL) {
        return -1;
    }
 
    int pos = 0;        
    Element* current = Head;
        
    while(current != Tail) {
        if (current->data == pValue) {              
            return pos;
        }
        pos++;
        current = current->Next;
    }
 
    if (current->data == pValue) {          
        return pos;
    }
 
    return -1;
}
1
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 73
10.03.2019, 11:34  [ТС] 3
Меорн, Спасибо, а чтобы вставка происходила в любую позицию, а не только в конец не знаете как?
0
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
10.03.2019, 11:44 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void insert(int pPos, char pData)
{
    Element* current = Head;
 
    for (int i = 0; i < pPos; i++) {
        current = current->Next;
        if (current == Tail) {
            break;
        }
    }
        
    Element* newElement = new Element();
    newElement->data = pData;
    newElement->Next = current->Next;
    current->Next = newElement;
        
}
1
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 73
10.03.2019, 12:12  [ТС] 5
Меорн, огромное спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2019, 12:12
Помогаю со студенческими работами здесь

Добавление элемента в конец списка
Сначала добавляет первый элемент, а далее не хочет? Посмотрите свежим глазом, а то я лагаю! void...

Добавление элемента в начало списка
Проблема в том, что выводит 100, 9. Почему не выводит промежуточные значения - не понятно. Вроде бы...

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

Добавление элемента в начало односвязного списка
Здравствуйте, я не где не могу найти функцию по добавлению элемента в начало односвязного списка....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru