Форум программистов, компьютерный форум, киберфорум
Наши страницы

Односвязный список: уничтожить н-ный эл-т и на его место поместить эл-т, нр которого хранится в н-ном эл-те - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как считать файл и обработать содержимое http://www.cyberforum.ru/cpp-beginners/thread831792.html
Создать массив структур. Каждая структура состоит из следующих элементов: фирма, продукт, который производит фирма. Для фирмы задать ее название, название города. Для продукта задать его название...
C++ Бинарное дерево поиска (определить максимальную глубину) Всем привет! Делаю лабу, написал основу, но не могу понять, как сделать последний пункт задания, нужно определить максимальную глубину сформированного дерева, т.е. число ветвей в самом длинном из... http://www.cyberforum.ru/cpp-beginners/thread831789.html
C++ Подключение файлов
Как правильно соединить такие 3 файла: main_doc.cpp (файл с главной функцией, с которого все собственно и начинается) gamer.cpp(файл с классом) gamer.h(заголовочный файл класса). Что и где мне...
C++ Цикл с предусловием, печать текста
Добрый вечер, господа программисты :) Помогите решить задачу - Если в текст входит любая буква из слова KEY, напечатать yes, иначе no. Вот что я набросал: // 10_1_14.cpp: определяет точку входа для...
C++ Определяет в каждом предложении текста количество символов, отличных от букв и пропуска http://www.cyberforum.ru/cpp-beginners/thread831749.html
Я не знаю что надо добавлять, помогите пожалуйста! Вот код #include "stdafx.h" #include <iostream> #include <fstream> #include "locale.h" #include <stdio.h> #include <string.h> #include...
C++ Программа на C++ Где ошибка? Ребята! Добавил в программу класс Getraenk(напитки). Она не хочет работать. Что сделал неправильно? #include <iostream> #include <cmath> using namespace std; //die Vereinbarung der Klasse... подробнее

Показать сообщение отдельно
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
14.04.2013, 14:28
w0nder,

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
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct List
{
    int data;                   //данные в списке
    List *next;                 //указатель на след элемент
};
 
class ListNode
{
    private:
        List *Head;             //голова списка
 
    public:
        ListNode()
        {
            Head = NULL;            //изначально список пуст
        }
 
        void addToBack(const int value)                 //добавление в конец
        {
            List *Ptr = new List;               //выделяем память
            Ptr -> data = value;                    //инициализируем новым значением
 
            if(Head == NULL)                    //если список пуст
            {
                Head = Ptr;                     //инициализируем голову
                Ptr -> next = NULL;             //больше элементов нет
            }
            else
            {
                List *temp = Head;                  //промежуточная переменная
 
                while(temp -> next != NULL)         //идем до последнего элемента
                    temp = temp -> next;
                
                temp -> next = Ptr;                 //последний указывает на новый
                Ptr -> next = NULL;                 //новый стал последним
            }
        }
 
        void delete_N_Elem(const int value)             //удялем n-ый элемент
        {
            int count_f(0);                     //счетчик в ноль
            List *Ptr = Head, *temp(NULL);      
 
            while(Ptr != NULL && count_f != value)      //пока список не закончился
            {                                           //и индекс не найден
                temp = Ptr;                             //предшествующий за текущим
                Ptr = Ptr -> next;
                ++count_f;
            }
 
            if(Ptr != NULL)                 //если элемент найден
            {
                List *tmp = Head;                       //промежуточн элемент
                int number(Ptr -> data), count_s(0);    //инициализ переменной значением элемента
 
                while(tmp != NULL && count_s != number)     //ищем элемент по порядку
                {
                    tmp = tmp -> next;
                    ++count_s;
                }
 
                if(count_s == number)               //если нашли
                    temp -> data = tmp -> data;     //иницализир нужной новым значением
            }
        }
 
        void delList()          //удялем весь список
        {
            List *tmp = Head;
            List *cur = NULL;
 
            if(Head != NULL)
            {
                while(tmp != NULL)
                {
                    cur = tmp -> next;
                    delete tmp;
                    tmp = cur;
                }
            }
 
            Head = NULL;
        }
 
        void showList()     //выводим список 
        {
            List *temp = Head;
 
            if(Head != NULL)
            {
                while(temp != NULL)
                {
                    cout << temp -> data << " ";
                    temp = temp -> next;
                }
            }
            else
                wcout << L"Список пуст!\n";
        }
};
 
void instructions();
void menu(ListNode &);
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));            //для работы с юникод строками
    wcin.imbue(locale(".866"));
 
    ListNode list1;
    menu(list1);
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
{
    wcout << L"Выберите пункт меню: " <<
        L"\n1 - Добавить элемент в начало" <<
        L"\n2 - Замена элемента" <<
        L"\n3 - Уничтожить список" <<
        L"\n4 - Выход.\n";
}
 
void menu(ListNode &Universal)
{
    int punkt_menu, value;
 
    instructions();
 
    do{
        wcout << L"\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Universal.addToBack(value);
                    Universal.showList();
                    break;
                case 2:
                    wcout << L"Введите номер элемента: ";
                        cin >> value;
 
                    Universal.delete_N_Elem(value);
                    Universal.showList();
                    break;
                case 3:
                    Universal.delList();
                    Universal.showList();
                    break;
            }
 
    }while(punkt_menu != 4);
 
    cout << "\n";
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru