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

Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру - 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 Реализовал это так:... подробнее

Показать сообщение отдельно
GamerPro
6 / 6 / 3
Регистрация: 16.03.2014
Сообщений: 86

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

16.03.2014, 16:58. Просмотров 461. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru