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

Удаление элемента из двусвязного списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ считывание координан из файла http://www.cyberforum.ru/cpp-beginners/thread961066.html
Добрый день,возникла проблема,нужно чтобы подпрограмма считывала координаты отрезка в пространстве (x,y,z) из файла,где будут находится координаты всех отрезков
C++ Массивы. Как перевести мат. формулу в функцию с++ в виде кода Здравствуйте, всем! Помогите объявить функцию в виде массива(3-х мерная матрица), где элементы массива равны согласно картине которую выкладываю. Нужно пробежаться по элементам матрицы в массиве, после чего умножить с каждым элементом 2-х матриц, а также их сложить и получить матрицу нового массива и в нем записать значение. Если нужно больше материала, предоставляю:... http://www.cyberforum.ru/cpp-beginners/thread961048.html
C++ Напечатать в столбик первые слова всех предложений текста
Напечатать в столбик первые слова всех предложений текста.
C++ Переделать задачу под бинарные файлы
Дан файл, компонентами которого являются массивы действительных чисел. Вычислить для каждого массива число отрицательных элементов. Записать в другой файл каждое из этих чисел. Сделал для текстовых файлов, но потом сказали что нужно переделать для бинарных файлов. Помогите переделать? #include "stdafx.h" #include <string.h> #include <math.h> #include <stdio.h> #include <stdlib.h>
C++ Как заполнить массив рандом? http://www.cyberforum.ru/cpp-beginners/thread960957.html
Как заполнить масив рандом в c++ Visual studio 2010 ?
C++ Найти количество четных и нечетных цифр в целом положительном шестизначном числе С++ для меня в новинку..и где тут что не так понять не могу.. подскажите, пожалуйста Задача звучит так: найти количество четных и нечетных цифр в целом положительном шестизначном числе, которое вводиться с клавиатуры. Так же нужно в самом начале сделать проверку числа. N - число n2 - переменная для целого ost - остаток os - для проверки на четность нечетность odd - нечетное подробнее

Показать сообщение отдельно
riggs
0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 7
24.09.2013, 11:48     Удаление элемента из двусвязного списка
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже работает, но после удаления любого элемента: добавление в конпец списка не работает, попытка удалить элемент вызывает аварийное завершение? В чем напутал? Заранее спасибо.

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
#include<iostream>
#include<conio.h>
#include<string>
#include<cstdlib>
#include<new>
#include<iomanip>
 
using namespace std;
 
class list
{
private:
struct store
{
    string name;
    int amount;
    double price;
    store *next;
    store *prev;
    store()
    {
        next=NULL;
        prev=NULL;
    }
};
    store *head;
    store *tail;
public:
    
    list()
    {
        head=NULL;
        tail=NULL;
    };
    void menu();
    void add();
    void del();
    void print();
};
 
int main()
{
    setlocale(LC_ALL, "russian");
    cout << "Добро пожаловать в программу" << endl;
    cout << endl;
    cout << "Для создания списка нажмите (1)" << endl;
    char c;
    c=getch();
    if(c=='1')
    {
        class list myList;
        cout << "список создан\n" << endl;
        myList.menu();
    }
    else
    {
        cout << "Произошла ошибка выбора. Программа будет закрыта" << endl;
        getch();
    }
 
    return 0;
}
 
void list::add()
{
    setlocale(LC_ALL, "russian");
    store *temp=new store;
    temp->next=NULL;
    cout << "введите название товара:" << endl;
    cin.ignore();
    getline(cin, temp->name);
    cout << "введите количество товара:" << endl;
    cin >> temp->amount;
    cout << "введите цену товара:" << endl;
    cin >> temp->price;
    if(!head)
    {
        temp->prev=NULL;
        head=tail=temp;
        temp->next=NULL;
    }
    else
    {
        temp->prev=tail;
        tail->next=temp;
        tail=temp;
    }
    cout << endl;
}
 
void list::del()
{
    setlocale(LC_ALL, "russian");
    cout << "введите названия искомого товара:" << endl;
    cin.ignore();
    string example;
    getline(cin, example);
    bool result=0;
    store *tmp= new store;
    tmp=head;
    while(tmp!=NULL)
    {
        
        if(example.compare(tmp->name)==0)
        {
            if(head->next==NULL)// если единственный элемент 
            {
                head=NULL;
                result=1;
                break;  
            }
            else
            {
                tmp->prev->next=tmp->next;
                result=1;
                break;
            }
                delete tmp;
                break;
        }
        if(!result)
        tmp=tmp->next;
        else
            break;
    }
    if(result)
        cout << "Удаление прошло успешно" << endl;
    else
        cout << "Произошла ошибка. Искомый товар не найден" << endl;
    cout << endl;
}
 
void list::print()
{
    store *temporary=new store;
    temporary=head;
    cout << setw(15) << "товар:" << setw(10) << "кол-во:" << setw(10) << "цена:" << endl;
    while(temporary)
    {
        cout << setw(15) << temporary->name << setw(10) << temporary->amount << setw(10) << temporary->price << endl;
        cout << endl;
        temporary=temporary->next;
    }
    delete temporary;
    
}
void list::menu()
{
    while(true)
    {
        cout << "меню:\n" << endl;
        cout << "(1) просмотр списка" << endl;
        cout << "(2) добавление в конец нового элемента" << endl;
        cout << "(3) корректировка(удаление элемента)" << endl;
        cout << "(4) выход и закрытие программы" << endl;
        short int choise;
        cin >> choise;
        switch (choise)
        {
        case 1:
            print();
            break;
        case 2:
            add();
            break;
        case 3:
            del();
            break;
        case 4:
            exit(0);
            break;
        default:
            cout << " Произошла ошибка, проверьте правельность ввода" << endl;
            break;
        }
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru