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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Писарев Иван
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
#1

Проблемы с удалением связанного списка(С++) - C++

05.09.2012, 15:37. Просмотров 375. Ответов 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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <iomanip>
#include <time.h>
#include <string>
 
 
using namespace std;
 
struct rabotnik
{
    string name;
    int staj;
    int zarplata;
    string doljnost;
    rabotnik* next;
};
 
rabotnik* head;
 
rabotnik* zapis(rabotnik *cur,  string P1, string P2, int p1, int p2)
{
    rabotnik* cur2 = new rabotnik; 
    cur2->name =P1; 
    cur2->doljnost=P2;
    cur2->staj=p1;
    cur2->zarplata=p2;
    cur2->next=NULL;
    cur=cur2;
    cur->next = head;
    head = cur;
    return cur;
}
 
rabotnik* promejutok(rabotnik* cur, int vopros)
{
    string P1, P2;
    int p1, p2;
    for (int i=0; i<vopros; i++)
    {
        cout<<endl<<"Введите имя работника ";
        cin >> P1;
        cout<<endl<<"Введите должность работника ";
        cin >> P2;
        cout<<endl<<"Введите стаж работника ";
        cin >> p1;
        while(p1>60||p1<0)
        cout<<endl<<"Введите зар.плату работника(в рублях) ";
        cin >> p2;
        zapis  (cur, P1, P2, p1, p2);
    }
    return(cur);
}
 
void Vivod(rabotnik* q)
{
    q=head;
    for (;q;)
    {
        cout << setw(15) << q->name << setw(15) << q->doljnost << setw(15) << q->staj << setw(15) << q->zarplata ;
        q=q->next;
    }
    cout<<endl;
}
 
void udalenie()
{
    rabotnik* prom;
    do
    {
        prom=head->next;
        delete head;
        head=prom;
    }while (head->next);
    delete head;
}
 
void main()
{
    int vopros=1, vopros1;
    setlocale(0, "");
    system("color F0");
    while(vopros==1)
    {
        cout<<"Введите кол-во рабочих на предприятии ";
        cin>>vopros;
        rabotnik* cur;
        cur=head;
        promejutok(cur, vopros);
        rabotnik* q=new rabotnik;
        Vivod(q);
        udalenie();
        cout<<"Если хотите запустить программу снова, нажмите 1 ";
        cout<<endl<<"ВНИМАНИЕ!";
        cout<<"Если Вы нажмете другую кнопку, программа завершит действие ";
        cin>>vopros;
    }
}
Прошу прощения, если данная тема уже поднималась.
Заранее большое спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2012, 15:37     Проблемы с удалением связанного списка(С++)
Посмотрите здесь:

Окончание связанного списка - C++
Скажите, пожалуйста, как в моём случае можно поступить: выйти из цикла, если нажатием Enter ничего не вводится и выдавать ошибку, если...

Удаление элемента из связанного списка - C++
Нужно удалить все элементы списка кратные 3. void Del() { if (head == NULL) cout &lt;&lt; &quot;\nСписок пуст\n\n&quot;; else { DoubleList...

Реализация очереди на основе связанного списка - C++
Реализация очереди на основе связанного списка в строках хэдэра tmp-&gt;ch.name = ch1.name; tmp-&gt;ch.surname = ch1.surname; ...

Как наиболее быстро определить зацикливание связанного списка? (a => b => c => d => e => a) - C++
You have a pointer to some element in a linked list (a =&gt; b =&gt; c =&gt; d =&gt; e). What is the fastest way to tell if there is a loop in the...

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

Сортировка связанного двумерного массива - C++
Есть входные данные вида: 1112 576 1113 577 1114 578 1115 579 1116 580 Данные - это x и y координаты. Их необходимо...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2012, 16:14     Проблемы с удалением связанного списка(С++) #2
Цитата Сообщение от Писарев Иван Посмотреть сообщение
while(p1>60||p1<0)
cout<<endl<<"Введите зар.плату работника(в рублях) ";
Что это за странный цикл, в котором ничего не меняется? Может так нужно ?
C++
1
2
3
4
5
if (p1 < 60 && p1 > 0)
{
    cout << endl << "Введите зар.плату работника(в рублях) ";
    cin >> p2;
}
Хотя ошибку это не убирает.
Писарев Иван
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
05.09.2012, 16:21  [ТС]     Проблемы с удалением связанного списка(С++) #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Что это за странный цикл, в котором ничего не меняется? Может так нужно ?
C++
1
2
3
4
5
if (p1 < 60 && p1 > 0)
{
    cout << endl << "Введите зар.плату работника(в рублях) ";
    cin >> p2;
}
:
Так оно на самом деле и есть. Просто в задании нужно было еще ставить так называемую "защиту от дурака" и сделать сортировку, но в целях экономии я это вырезал все(сортировка работает верно). Спасибо за замечание.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2012, 16:43     Проблемы с удалением связанного списка(С++) #4
Если так, то, вроде бы, работает:
C++
1
2
3
4
5
6
7
8
9
10
11
void udalenie()
{
    rabotnik* prom;
    do
    {
        prom = head -> next;
        delete head;
        head = prom;
    } while (head);
    delete head;
}
Писарев Иван
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
05.09.2012, 16:55  [ТС]     Проблемы с удалением связанного списка(С++) #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Если так, то, вроде бы, работает:
C++
1
2
3
4
5
6
7
8
9
10
11
void udalenie()
{
    rabotnik* prom;
    do
    {
        prom = head -> next;
        delete head;
        head = prom;
    } while (head);
    delete head;
}
Огромнейшее вам спасибо!
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
05.09.2012, 17:11     Проблемы с удалением связанного списка(С++) #6
C++
1
2
3
4
5
6
7
8
9
10
11
void udalenie()
{
    rabotnik* prom;
    do
    {
        prom = head -> next;
        delete head;
        head = prom;
    } while (head);
    // delete head;    <--- вот это уже лишнее, хотя работать все равно будет :-)
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2012, 17:20     Проблемы с удалением связанного списка(С++)
Еще ссылки по теме:

Исходники чего угодно, связанного с шифрованием - C++
Нужны вот такие 2 вещи, очень срочно! Я в коде - полный ноль:-| Буду весьма благодарен. Разработать симметричный алгоритм шифрования...

Помогите с удалением - C++
Такая проблема не могу понять как сделать: пользователь вводит текст длиной не больше 250 символом, конец ввода символ /. Потом...

Помогите с удалением из файла - C++
Возникла такая проблема: Создана структура, запоняю ее, когда делаю запись в файл (каждая запись по 100 байт) потом считываю информацию с...

Помогите с удалением строки матрицы - C++
Доброго времени суток всем! Такая ситуация, что нужно удалить методом сдвига из матрицы строку, сумма элементов котороя равна 0. Я вот...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2012, 17:20     Проблемы с удалением связанного списка(С++) #7
Цитата Сообщение от CheshireCat Посмотреть сообщение
вот это уже лишнее, хотя работать все равно будет
Верно.
Yandex
Объявления
05.09.2012, 17:20     Проблемы с удалением связанного списка(С++)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru