Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
GamerPro
6 / 6 / 4
Регистрация: 16.03.2014
Сообщений: 86

Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру - C++

16.03.2014, 16:58. Просмотров 513. Ответов 6
Метки (Все метки)

Всем привет, не знаю создавалась ли подобная тема (нашел кое что похожее но не помогло)
Столкнулся с проблемой, никак не могу сделать функцию для удаления строчки из структуры по заданному номеру
Запутался с указателями
Заранее спасибо за помощь

весь код, ниже
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
170
171
172
173
174
175
176
177
178
179
180
181
#include <windows.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
 
struct TRAIN
{
    char Nazv[20]; 
    int Numb; 
    char Date[10]; 
    char Time[10]; 
    void Input(TRAIN &train);  //Функция ввода данных в структуру 
    TRAIN *Next; //Адрес на следующий элемент
};
 
class List
{
        TRAIN *Head; //Указатель на начало списка
        int size;
    public:
        List():Head(NULL),size(0) {}; //Инициализация значений с помощью конструктора 
        ~List();
        void Add(TRAIN &train);
        void Show();
        void One_show(int N);
        void Del(int N);
        int Count() {return size;}; 
        
};
 
 
void TRAIN::Input(TRAIN &train)
{
    cout<<endl; 
    cout<<"Конечный пункт: "; cin.getline(Nazv,20); 
    cout<<"Номер поезда: ";cin>>Numb;  
    cin.ignore(); 
    cout<<"Дата отправления:  ";cin.getline(Date,10); 
    cout<<"Время отправления: ";cin.getline(Time,10);
}
 
 
 List::~List() 
{
        while (Head!=NULL) //Пока по адресу есть что-то
        {
            TRAIN *temp=Head->Next; //запоминаем указатель на адрес следующего элемента структуры
            delete Head; //Освобождаем память по месту начала списка
            Head=temp; //Меняем адрес начала списка
        }
}
 
 
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
 void List::Add(TRAIN &train)
 {     size++;
       TRAIN *temp=new TRAIN; //Выделение памяти под новую структуру
       temp->Next=Head; //Указываем, что адрес следующего элемента это начало списка
//Копирование содержимого параметра student в только что созданную переменную
       strcpy_s(temp->Nazv,train.Nazv);
       temp->Numb=train.Numb;
       strcpy_s(temp->Date,train.Date);
       strcpy_s(temp->Time,train.Time);
       Head=temp; //Смена адреса начала списка
 }
 
 
 
 void List::Show()
 {
     TRAIN *temp=Head; //Объявляем указатель и изначально он указывает на начало
     if ((Head!=NULL)&&(size>0)){
     cout << "-----------------------------------------------------------------------------\n";
     cout << "|| Конечный пункт || Номер поезда || Дата отпарвления || Время отправления ||\n";
     cout << "-----------------------------------------------------------------------------\n";
     while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
     {
         cout<<"||"<<setw(16)<<temp->Nazv<<"||"; 
         cout<<setw(14)<<temp->Numb<<"||"; 
         cout<<setw(18)<<temp->Date<<"||"; 
         cout<<setw(19)<<temp->Time<<"||"<<endl; 
         temp=temp->Next; //Указываем на следующий адрес из списка
     }
     cout << "-----------------------------------------------------------------------------\n\n";
     }
     else
     {
     cout << "Структура - пустая\n\n";
     }
 }
 
void List::One_show(int N) 
{
    TRAIN *temp=Head; //Обращаемся к началу списка
    if ((Head!=NULL)&&(N<size)) //Делаем проверку на то что список не пуст и N не превышает число его элементов
        {
                 cout << "-----------------------------------------------------------------------------\n";
                 cout << "|| Конечный пункт || Номер поезда || Дата отпарвления || Время отправления ||\n";
                 cout << "-----------------------------------------------------------------------------\n";
            for (int i=0;i<N;i++) temp=temp->Next; //Меняем адрес N раз
                 cout<<"||"<<setw(16)<<temp->Nazv<<"||"; 
                 cout<<setw(14)<<temp->Numb<<"||"; 
                 cout<<setw(18)<<temp->Date<<"||"; 
                 cout<<setw(19)<<temp->Time<<"||"<<endl; 
                 cout << "-----------------------------------------------------------------------------\n\n";
        }
    else{cout << "\nПустая строка (Неверная)\n\n";}
}
 
void List::Del(int N) 
{
    TRAIN *temp=Head; //Обращаемся к началу списка
    if ((Head!=NULL)&&(N<size)) //Делаем проверку на то что список не пуст и N не превышает число его элементов
        {    
            for (int i=0;i<N;i++) temp=temp->Next; //Меняем адрес N раз
                
                TRAIN *temp=Head->Next; //запоминаем указатель на адрес следующего элемента структуры
                delete temp; //Освобождаем память по месту начала списка
                Head=temp; //Меняем адрес начала списка
                size--;
                
        }
    else{cout << "\nМы будем воздух удалять?!?\n\n";}
}
 
 
 
 
int main ()
{
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
      TRAIN train; //Обяъвили переменную, тип которой ПОезд
      int N, key;  
      List lst; //Объявили переменную типа Список. Она выступает как контейнер данных       
      met:
      
      cout<< "Меню:\n" << "(1) - Добавить поезд в расписание\n" << "(2) - Вывести все поезда\n"<< "(3) - Вывести один поезд\n"<< "(4) - Удалить один поезд\n\n"<< "(0) - Завершыть работу\n\n" << "Ваш выбор: " ;
      cin >> key;
      switch (key)
        {
        case 0: break;
        case 1:
            cout<<"\nВведите к-во поездов: ";cin>>N;
            cin.ignore();
            for (int i=0;i<N;i++)
                {
                     train.Input(train); //Передаем в функцию заполнения переменную поезд
                     lst.Add(train); //Добавляем заполненную структуру в список
                }
            goto met;
            break;
        case 2:
            cout<<endl;
            lst.Show(); //Показываем список на экране
            goto met;
            break;
        case 3:
            cout<<"\nВведите номер елемента: ";cin>>N;
            N-=1;
            cin.ignore();
            lst.One_show(N);
            goto met;
            break;
        case 4:
            cout<<"\nВведите номер елемента для удаления: ";cin>>N;
            N-=1;
            cin.ignore();
            lst.Del(N);
            goto met;
            break;
        default:
            cout << "Ошибка ввода\n\n";
            goto met;
            break;
        }
        
}
Добавлено через 4 часа 0 минут
Помогите пж, на завтра нужен готовый код
Никак не выходит
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 16:58
Готовые ответы и решения для C++ Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру:

Структуры и односвязные списки
Помогите с задачей. Заранее спасибо. &quot;Сформировать список из натуральных...

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

Динамические структуры данных. Односвязные списки
Вот код. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt;...

Написать функцию сортировки по заданному полю для структуры User
Помогите сделать сортировку в структуре по полю surname любым способом #define...

Реализовать функцию поиска для структуры Книга
вообщем, не знаю как сделать поиск по книге, нужно сделать так: ввожу...

Создать очередь вещественных значений, для реализации используя односвязные списки
Создать очередь вещественных значений, для реализации используя односвязные...

6
Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру C++   Следующее сообщение темы 
Другие темы раздела
C++ Написать программу замены введенного числа от 0 до 5 соответствующим символом, а все другие значения заменять буквой z http://www.cyberforum.ru/cpp-beginners/thread1120700.html
Написать программу замены введенного числа от 0 до 5 соответствующим символом, а все другие значения заменять буквой z. ИСПОЛЬЗУЯ ОПЕРАТОР SWITCH.
C++ Алгоритм выделения динамической памяти Объясните пожалуйста на словах, алгоритм выделения динамической памяти под двухмерный массив. float **ptrarray = new float* ; for (int count = 0; count < 2; count++) ptrarray = new... http://www.cyberforum.ru/cpp-beginners/thread1120696.html
Вычислить k-количество точек с целочисленными координатами, попадающих в круг ра-диуса R(R>0) с центром в начале координат C++
Очень нужна ваша помощь. Написала программу , но не уверенна в ее правильности. Можете посмотреть и исправить ,если что-то не так . Заранее благодарна. #include <iostream> #include <cstdio> using...
структура "Провайдер" C++
Создать структуру провайдер с полями абонент, тариф, состояние счета, абонентская плата, входящий трафик, исходящий трафик, другие зачисления, дата последнего зачисления. Написать функцию, выводящую...
C++ Сортировки: вставка и обмен http://www.cyberforum.ru/cpp-beginners/thread1120514.html
Есть две сортировки: вставка и обмен. нужно их соединить в один код, но не получается вот один код #include "stdafx.h" #include <iostream> #include <ctime> #include <iomanip> using namespace...
C++ Запись в файл Здравствуйте. Такая вот проблема: Есть функция, вычисляющая на встроенном ассемблере уравнение. Значения должны браться из файла input.txt и ответ выдаваться в output.txt Реализовал это так:... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru