0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
1

Удаление последнего элемента Дека

09.06.2015, 18:11. Показов 788. Ответов 4
Метки нет (Все метки)

Все работает, кроме удаления последнего элемента. Подскажите пожалуйста, что не так?
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
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <cstdlib>
#include <iostream>
using namespace std;
 
class dek
{
public:
        
        char number[100];
        dek* next;
        dek* last;
};
 
void my_dek(const char*);
 
        
        short action = -1;
        dek* head = NULL;
        dek* tail = NULL;
        dek* lastPtr = NULL;
        dek* ptrLast = NULL;
 
        int i,j;
 
       int add()
       
               
                { 
                       system("CLS");
                        dek* ptr = new dek;
                        
                        cout<<"Vvedite danue: ";
                        cin>>ptr->number;
                        ptr->next = NULL;
                        if (head == 0)
                        {
                                head = ptr;
                                lastPtr = ptr;
                                system("CLS");
                                return 0;;
                        }
                        lastPtr->next = ptr;
                        lastPtr = ptr;
                        system("CLS");
                        return 0;;
       }
 
     
              int  prosmotr()
                {
                    {
                       system("CLS");      
                        dek* ptr = NULL;
                        
                        if (head == NULL)
                        {
                                cout<<"\n Dek pustoi\n\n";
                                system("PAUSE");
                                system("CLS");
                                return 0;                                
                        }
                        cout<<"dek:\n\n";
                        ptr = head;
                        while (1)
                        {
                                cout<<ptr->number<<" ";
                                if (ptr->next == 0)
                                        break;
                                ptr = ptr->next;
                        }
                        cout<<"\n\n";
                        system("PAUSE");
                        system("CLS");
                        }
                        return 0;
                }
 
              
 
                int delhead()
                {
                        system("CLS");
                        dek* ptrDelete = NULL;                 
                        if (head == NULL)
                        {
                                cout<<"\n Dek pustoi !!!\n\n";
                                system("PAUSE");
                                system("CLS");
                                return 0;
                                
                        }
                        if (head->next == NULL)
                        {
                                head = NULL;
                                tail = NULL;
                                delete head;
                                
                        }
                        ptrDelete = head;
                        head = ptrDelete->next;
                        head->last = NULL;
                        delete ptrDelete;
                        return 0;
                }
 
                int deltail()
                {
                        system("CLS");
                        dek* ptrDelete = NULL;
                        if (tail == NULL)
                        {
                                cout<<"\n dek pustoi \n\n";
                                system("PAUSE");
                                system("CLS");
                                return 0;
                        }
                        if (tail->last == NULL)
                        {
                                head = NULL;
                                tail = NULL;
                                delete tail;
                                
                        }                       
                        ptrDelete = tail;
                        tail = ptrDelete->last;
                        tail->next = NULL;
                        ptrLast = tail;
                        delete ptrDelete;
                        return 0;
                }
 
 
                int proverka()
                {
                        dek* ptr = NULL;
                        system("CLS");
                        if (head == NULL)
                        {
                                cout<<"\n Dek pustoi !!!\n\n";
                                system("PAUSE");
                                system("CLS");
                                return 0;
                                
                        }
                         
                        if (head != NULL)
                        {
                            cout<<"\n Dek ne pustoi !!!\n\n";
                            system("PAUSE");
                            system("CLS");
                            return 0;
                            
                        }
                        return 0;
                }
        int clean(){
            head = NULL;
            tail = NULL;
        return 0;
 }
 int main()
 {
     setlocale(0,"Rus");
     do
     {
                cout<<"1. Dobavit element\n";
                cout<<"2. Prosmotr deka \n";
                cout<<"3. Udalit pervui\n";
                cout<<"4. Udalit posledniy element\n";
                cout<<"5. Proverka nlichiya deka\n";
                cout<<"6. Ochistit dek\n";
                cout<<"0. Exit\n\n";             
                cout<<"Vash vubor: ";
                cin>>action;
 
                switch (action)
                {
                case 1: add(); break;
                case 2: prosmotr(); break;
                case 3: delhead(); break;
                case 4: deltail(); break;
                case 5: proverka(); break;
                case 6: clean(); break;
                case 0: return 0; break;
                }
                cout<<"1. Prodolzhut robotu\n";
                cout<<"0. Exit\n";
                cin>>action;
                system("PAUSE");
                system("CLS");
     }
     while (action!=0);
     return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2015, 18:11
Ответы с готовыми решениями:

Удаление последнего элемента массива
Функция для удаления последнего элемента в массиве. укажите на ошибку пожалуйста, функция выдает...

Удаление последнего элемента из списка
Есть функция void List::DeleteElement(void) { Element *vsp; if (!begin) { cout &lt;&lt; &quot;Is...

Удаление последнего элемента в строке
Добрый вечер. Не могу решить задачу со строками. Нужно построить односвязный список, удалить...

Удаление последнего элемента из списка
Добрый день! Проблема такая, удаляя последний элемент из списка, выдает ошибку Помогите...

4
Don't worry, be happy
17215 / 10090 / 1949
Регистрация: 27.09.2012
Сообщений: 25,190
Записей в блоге: 1
09.06.2015, 18:14 2
C++
117
118
119
120
121
122
123
 if (tail->last == NULL)
                        {
                                head = NULL;
                                tail = NULL;
                                delete tail;
                                // return 0; забыли???
                        }
0
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
09.06.2015, 18:21  [ТС] 3
Не помогло
0
Don't worry, be happy
17215 / 10090 / 1949
Регистрация: 27.09.2012
Сообщений: 25,190
Записей в блоге: 1
09.06.2015, 18:21 4
Cheshyrsky_Kot, там же еще есть ошибка - сначала обнуляете указатель, потом делаете delete. Надо наоборот, иначе память утечет
0
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
09.06.2015, 18:24  [ТС] 5
Croessmah, А можете пожалуйста показать в коде?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2015, 18:24

Удаление последнего элемента списка
А вот когда удаляешь последний элемент списка, обязательно в предпоследнем присваивать указатель...

Удаление последнего чётного элемента массива
Здравствуйте,помогите дописать программу,пожалуйста. Нужно,чтобы программа удаляла последний...

Удаление последнего элемента односвязного списка
как сделать в списке pop_back и полное очищение? struct Node { int value; Node* next;...

Удаление последнего элемента из однонаправленного линейного списка
Здравствуйте, удаляю значится элемент: (x - порядковый номер удаляемого элемента, начиная с 1....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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