Форум программистов, компьютерный форум 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 float ; http://www.cyberforum.ru/cpp-beginners/thread1120696.html
Вычислить k-количество точек с целочисленными координатами, попадающих в круг ра-диуса R(R>0) с центром в начале координат C++
Очень нужна ваша помощь. Написала программу , но не уверенна в ее правильности. Можете посмотреть и исправить ,если что-то не так . Заранее благодарна. #include <iostream> #include <cstdio> using namespace std; int main() { long long x,y, s=0;// вводим переменные х,у -координаты ,s-счетчик точек(обнуляем),r-радиус double r; cin>>r; //как только прога начинает работать требуется...
структура "Провайдер" C++
Создать структуру провайдер с полями абонент, тариф, состояние счета, абонентская плата, входящий трафик, исходящий трафик, другие зачисления, дата последнего зачисления. Написать функцию, выводящую пользователей с наибольшим входящим и исходящим трафиком, подсчитывающую затраты каждого пользователя, пользователем с состоянием счета менее -10 у.е. удалить, сделать возможность добавления новых...
C++ Сортировки: вставка и обмен http://www.cyberforum.ru/cpp-beginners/thread1120514.html
Есть две сортировки: вставка и обмен. нужно их соединить в один код, но не получается вот один код #include "stdafx.h" #include <iostream> #include <ctime> #include <iomanip> using namespace std; void insertionSort(int *, int); // прототип функции сортировки вставками
C++ Запись в файл Здравствуйте. Такая вот проблема: Есть функция, вычисляющая на встроенном ассемблере уравнение. Значения должны браться из файла input.txt и ответ выдаваться в output.txt Реализовал это так: fstream file; file.open("input.txt",ios::in); if(!file) return 1; file>>a>>b>>c>>d; file.close(); file.open("output.txt",ios::out); подробнее

Показать сообщение отдельно
GamerPro
6 / 6 / 3
Регистрация: 16.03.2014
Сообщений: 86
24.03.2014, 18:25  [ТС]     Односвязные списки. Реализовать функцию для удаления строчки из структуры по заданному номеру
Если кому то нужно, вот
Полноценный односвязный список

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
#include <windows.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
 
struct TRAIN
{
    char Nazv[30]; 
    int Numb; 
    char Date[20]; 
    char Time[20]; 
    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,30); 
    cout<<"Номер поезда: ";cin>>Numb;  
    cin.ignore(); 
    cout<<"Дата отправления:  ";cin.getline(Date,20); 
    cout<<"Время отправления: ";cin.getline(Time,20);
}
 
 
 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; //Указываем, что адрес следующего элемента это начало списка
       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-1;i++) temp=temp->Next; //Меняем адрес N раз
                TRAIN *tmp=temp->Next;
 
            if(temp->Next==NULL){}
                else
                temp->Next = temp->Next->Next;
                size--;
                delete tmp;
                
        }
    else{cout << "\nМы будем воздух удалять?!?\n\n";}
}
 
 
int main ()
{
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
      TRAIN train; //Обяъвили переменную, тип которой ПОезд
      int N, key;  
      List lst; //Объявили переменную типа Список. Она выступает как контейнер данных       
      met:
      
      cout<< "\n\n---------------------------------\nМеню:\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;
        }
        
}
 
Текущее время: 01:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru