Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 12
1

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

10.06.2015, 04:32. Просмотров 1789. Ответов 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
#include <iostream>
#include <string.h>
#include <stdlib.h>
 using namespace std;
struct Student
{
    char Name[20]; 
    char NameLast[30]; 
    char School[30]; 
    void Input(Student &student); 
    Student *Next; 
};
class List
{
    Student *Head; 
public:
    List():Head(NULL){}; 
    ~List();
    void Add(Student &student);
    void Show();
};
//ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО СТУДЕНТУ
void Student::Input(Student &student)
{
    cout<<endl; 
    cout<<"Имя:  "; cin.getline(Name,20); 
    cout<<"Фамилия:  ";cin.getline(NameLast,30); 
    cout<<"Полных лет ";cin>>Age;  
    cin.ignore();
    cout<<"Где учится ";cin.getline(School,30); 
}
List::~List() 
{
        while (Head!=NULL) 
        {
            Student *temp=Head->Next; 
            delete Head; 
            Head=temp; 
        }
}
//ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК
 void List::Add(Student &student)
 {
     Student *temp=new Student; 
     temp->Next=Head; 
       strcpy(temp->Name,student.Name);
       strcpy(temp->NameLast,student.NameLast);
       temp->Age=student.Age;
       strcpy(temp->School,student.School);
     Head=temp; 
 }
//ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН
 void List::Show()
 {   Student *temp=Head;
     while (temp!=NULL) 
     {
         cout<<temp->Name<<" "; 
         cout<<temp->NameLast<<", "; 
         cout<<temp->Age<<", "; 
         cout<<temp->School<<endl; 
         temp=temp->Next; 
     }
     cout<<endl;
 }
int main ()
{
 setlocale(LC_ALL, "RUS");
  Student student; 
  int N; 
  List lst; 
    cout<<"N = ";
    cin>>N; 
    cin.ignore(); 
     for (int i=0;i<N;i++)
    {
     student.Input(student); 
     lst.Add(student);
    }
    cout<<endl;
    lst.Show(); 
  system("PAUSE");
 return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2015, 04:32
Ответы с готовыми решениями:

Реализация списка.Удаление хвостового элемента.Поиск элемента
Всем привет,мое задание выглядит так : В класс List&lt;T&gt; из классной работы добавить следующие...

Удаление элемента списка и всего списка
Компилируется, но не работает. Что и как исправить? #include &lt;cstdlib&gt; #include &lt;iostream&gt;...

Удаление элемента из списка и поиск элемента
Нужно удалить определенный элемент из списка. Найти элемент в списк и вывести на него всю...

Удаление элемента из списка
Здравствуйте, нужна помощь, программа, выполняющая следующие задания на основе двусвязного списка....

4
70 / 64 / 39
Регистрация: 17.02.2014
Сообщений: 265
10.06.2015, 05:07 2
Лучший ответ Сообщение было отмечено HellSing как решение

Решение

Код такой же как в деструкторе, только без цикла.
0
0 / 0 / 0
Регистрация: 28.04.2015
Сообщений: 12
10.06.2015, 09:05  [ТС] 3
smartpointer, простите, а можете оформить кодом? Действительно сообразить не могу.

Добавлено через 25 минут
Я оформила в таком видео, и код действительно удаляет элемента списка, но последний вошедший в него.
C++
1
2
3
4
5
 void List::Pop()
 {Student *temp=Head->Next; 
            delete Head; 
            Head=temp;
 }
Ввожу:
"Иван Петров 18 МГУ
Сергей Иванов 19 МГУ
Елена Иванова 17 МГУ".
Выводит:
"Иван Петров 18 МГУ
Сергей Иванов 19 МГУ".
0
70 / 64 / 39
Регистрация: 17.02.2014
Сообщений: 265
10.06.2015, 09:13 4
Все верно вы же удаляете с начала списка а не с конца - то есть аналог стека получился.
1
шКодер самоучка
2119 / 1840 / 897
Регистрация: 09.10.2013
Сообщений: 4,019
Записей в блоге: 7
10.06.2015, 09:26 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<class X>
X* remove_tail(X* head) {
    X* tail = head;
    if(tail) {
        X* prev = nullptr;
        while(tail->next) {
            prev = tail;
            tail = tail->next;
        }
        if(prev) {
            prev->next = nullptr;
        }
        else {
            head = nullptr;
        }
        delete tail;
    }
    return head;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 09:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление элемента из списка
Нужно удалить из списка элемент, стоящий после элемента на который указывает Р. Очень срочно надо!...

Удаление элемента из списка
Нужно удалить всех студентов с оценками 2. Entry *begin = new Entry; int mark=2; Entry...

Удаление элемента из списка
Здравствуйте, нужна помощь, программа, выполняющая следующие задания на основе односвязного списка....

Удаление элемента со списка
Вот у меня есть код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...


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

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

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