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

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

10.02.2017, 13:31. Показов 6717. Ответов 0
Метки нет (Все метки)

Всем добрый день!
Задача такая, добавить элемент в начало списка, и удалить последний элемент из списка
Добавить получилось, удалить нет. Вот код
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
#include <iostream>
#include <time.h>
using namespace std;
 
//описываем структуру, которая будет элементом списка
struct NODE{
    double info;  //информационное поле
    struct NODE* next;  //указатель на следующий элемент списка
};
 
NODE* first = NULL;  //голова списка
NODE* last = NULL;  //и хвост
 
//функция вывода списка
void print_list()
{
    NODE* current = first; //становимся на первый элемент
    cout << "List elements:\n";
    if (!current) cout << "List is empty!\n";
    while (current)// Пока указатель на элемент current не равен  NULL
    {
        cout << current->info << " "; //Обрабатываем текущий элемент
        current = current->next; //Перемещаемся к следующему элементу
    }
}
 
//функция добавления элемента в конец списка
void add_element()
{
    
    NODE* current = new NODE;//Выделение места в памяти под новый элемент
    double x = (rand() % 10) / 10.0;
    current->info = x; //Установка значения элемента
    current->next = NULL;
    //если список пустой
    if (!first)
    {
        first = current;//установить созданный элемент в качестве первого
    }
    else last->next = current; //установить поле next последнего элемента списка на указатель на новый элемент
    last = current; //новый элемент устанавливается в качестве последнего
}
 
//функция создания списка
void make_list()
{
    int n;
    cout << "Input count of list's elements:";
    cin >> n;
    for (int i = 0; i<n; i++)
    {
        add_element();
    }
}
 
//функция поиска элемента в списке
void findX()
{
    if (!first) return;
    int i = 1;
    NODE* current = first;
    double x;
    cout << "\nInput X:";
    cin >> x;
    while (current)
    {
        if (current->info == x)
        {
            cout << i << " ";
        }
        current = current->next;
        i++;
    }
}
 
//функция полного удаления списка
void del_list()
{
    while (first)
    {
        NODE* current = first; //Присвоить адрес первого элемента списка вспомогательному указателю
        first = current->next;//Указателю на первый элемент присвоить указатель на второй элемент
        delete current; //Освободить память, на которую  указывает вспомогательный указатель
    }
}
void add_element_start(){
    NODE* current = new NODE;//Выделение места в памяти под новый элемент
    double x = (rand() % 10) / 10.0;
    current->info = x; //Установка значения элемента
    current->next = NULL;
    //если список пустой
    if (first == NULL)
        current->next=NULL;
    
    else{
        current->next = first; 
    first = current;
    }
 
}
/* удаление последнего элемента*/
 
void del_element_end()
{
    NODE* current = first; //Присвоить адрес первого   
    while(current->next)
    {
        current = current->next;
    }
    
    delete last;
    last = current;
}
 
//а вот и главная программа
void main()
{
    srand(time(NULL));
    cout << "\n";
    make_list();// создать лист
    cout << "\n";
    print_list();// печать лист
    cout << "\n";
    findX();//функция поиска элемента в списке
    //del_list();// удалить лист
    //make_list();
    add_element_start();// добовление элемента в начало списка
    //add_element();
    //make_list();//функция создания списка
    print_list();
    del_list();// удалить лист
    cout << "\n";
    system("pause");//ожидаем...
}
при выполнении del_element_end() последний элемент отображается 2,682254565е +328 и ошибка.
Помогите, что не так?

Добавлено через 13 минут
Не тот раздел сори) не досмотрел, мне С++ нужен)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2017, 13:31
Ответы с готовыми решениями:

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

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

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

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2017, 13:31

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

Как сделать удаление последнего элемента списка ?
Помогите написать функцию удаления последнего элемента списка.

Удаление последнего введенного элемента из списка (стека)
Напишите пожалуйста программу для удаления последнего введенного элемента из списка (стеку)

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru