Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25

Вывод элемента в списке с заданным номером

21.01.2015, 09:21. Показов 2634. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Есть шаблон односвязного списка, можно ли сделать в нём новую процедуру вывода одного заданного элемента из списка? Заранее спасибо.
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
#include <iostream>
 
using namespace std;
 
template <typename T>
class List
{
    struct Node
    {
        T data;
        Node *next;
        Node(T d, Node *n = 0):data(d), next(n) {}
    };
   
    Node *head;
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty(); 
    void insertAfter(Node *pre, T d); 
    void removeAfter(Node *pre); 
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void create(int k); 
        
};
 
template <typename T>
List<T>::~List()
{
    while (!isEmpty())
       popFront();
}
 
template <typename T>
bool List<T>::isEmpty() 
{
    return !head;
}
 
template <typename T>
void List<T>::insertAfter(Node *pre, T d) 
{ 
    if(!pre) return;
    Node *newNode = new Node(d,0);
    newNode->next = pre->next;
    pre->next = newNode;
}
 
template <typename T>
void List<T>::removeAfter(Node *pre)
{
    Node *tmp = pre->next; 
    pre->next = pre->next->next;
    delete tmp;
}
 
template <typename T>
void List<T>::pushFront(T d)
{
    Node *newNode = new Node(d,0);
    if(!head) {
        head = newNode;
        return;
    }
    newNode->next = head;
    head = newNode;
}
 
template <typename T>
T List<T>::popFront()
{
    T data;                 
    if(!head) return data;
    Node *tmp = head;
    data = head->data;
    if(head->next) {
        head = head->next;
       delete tmp;
        return data;
    }
    delete tmp;
    head = NULL;
    return data;
}
 
 
template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}
 
 
template <typename T>
void List<T>::print()
{
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k)
{
    T d;
    for (int i = 1; i <= k; i++)
    {
        cout << "Enter " << i << " element: ";
        cin >> d;
        pushFront(d);
        
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2015, 09:21
Ответы с готовыми решениями:

Удалить/добавить в списке k элементов после элемента с заданным номером
привет всем , помогите плиз. Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из...

Поменять местами два элемента массива, равноудалённых от элемента с заданным номером
Помогите с задачей : В отсортированном по убыванию одномерном массиве из N вещественных чисел поменять местами элементы, стоящие...

Инвертировать часть массива с первого элемента до элемента с заданным номером
Инвертировать часть массива с первого элемента до элемента с заданным номером, после чего определить номер и значение самого последнего...

10
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.01.2015, 10:21
Цитата Сообщение от Greyewi Посмотреть сообщение
Есть шаблон односвязного списка
"Есть шаблонный класс, реализующий односвязный список."
Цитата Сообщение от Greyewi Посмотреть сообщение
можно ли сделать в нём новую процедуру вывода одного заданного элемента из списка?
"Можно ли добавить в него новый метод вывода произвольного элемента списка?"
0
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25
21.01.2015, 10:46  [ТС]
SatanaXIII,
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Можно ли добавить в него новый метод вывода произвольного элемента списка
Да, т.е. вводишь номер элемента и на экран выводится его значение
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.01.2015, 10:58
Вам следует хранить количество элементов непосредственно в теле вашего класса. Вот то значение, которое передается в метод create. Или завести второй указатель на хвост списка. Следовательно потом перебирать все элементы, пока не будет достигнуто либо то, либо то. Либо, само собой, не будет найден требуемый элемент.
1
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25
21.01.2015, 12:23  [ТС]
SatanaXIII, Спасибо суть уловил, мне можно работать именно с односвязным некольцевым списком, по этому попробую сделать, как вы в начале сказали. Спасибо идею я понял, сейчас попробую это реализовать

Добавлено через 1 час 2 минуты
SatanaXIII, Ещё один вопрос, а можно сделать что бы эта функция не выводила на монитор значение, а просто передавала его для дальнейшей работы?
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
typename List<T>::Node* List<T>::print_El(int k,int q) //k-количество элементов в списке.q-искомый элемент
{
    if(!head) return NULL;
    Node *cur  = head;
    for (int i = 1; i <= k; i++)
    {
      if(i==q) cout << cur->data;
       cur = cur->next;
    }
}
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.01.2015, 12:28
Как-нибудь вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
typename List<T>::Node* List<T>::print_El(int k,int q) //k-количество элементов в списке.q-искомый элемент
{
    if(!head) return NULL;
    Node *cur  = head;
    for (int i = 1; i <= k; i++)
    {
      if(i==q) return cur; // cout << cur->data;
       cur = cur->next;
    }
}
0
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25
21.01.2015, 13:17  [ТС]
SatanaXIII, Я так пробовал, так этот метод становится аналогичным методу search, т.е. выдаёт, как я понимаю ключ, а не значение

Добавлено через 1 минуту
SatanaXIII, А если делать не cur, a cur->data; то выдаёт ошибку
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.01.2015, 13:23
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
T* List<T>::print_El(int k,int q) //k-количество элементов в списке.q-искомый элемент
{
    if(!head) return NULL;
    Node *cur  = head;
    for (int i = 1; i <= k; i++)
    {
      if(i==q) return cur->data;
       cur = cur->next;
    }
}
А так?
0
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25
21.01.2015, 14:16  [ТС]
SatanaXIII, Всё равно та же ошибка в строке 8, где
C++
1
 if(i==q) return cur->data;
Вот пример инициализации
C++
1
2
3
4
5
6
7
8
9
10
int main(){
    
    List<int> *L1 = new List <int>(NULL);
L1->create(7);
L1->print();
cout<<L1->print_El(7,2);
    
    
    
}
по идее должен вывести 2 элемент списка... пишет ошибку [Error] invalid conversion from 'int' to 'int*' [-fpermissive]
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.01.2015, 14:42
Цитата Сообщение от Greyewi Посмотреть сообщение
invalid conversion from 'int' to 'int*'
C++
1
if(i==q) return &cur->data;
0
1 / 1 / 2
Регистрация: 10.10.2013
Сообщений: 25
21.01.2015, 14:49  [ТС]
В таком случае он снова выводит какие то непонятные цифры, предположительно указатель((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2015, 14:49
Помогаю со студенческими работами здесь

Инвертировать часть массива с первого элемента до элемента с заданным номером
Инвертировать часть массива с первого элемента до элемента с заданным номером, после чего определить номер и значение самого последнего...

Добавление элемента после элемента с заданным ключом в однонаправленном списке
Здравствуйте! У меня неправильно работает функция insert, которая должна добавлять элемент после элемента с заданным ключом (key1). ...

Обнулить в списке все элементы кроме элемента с номером N
Я хочу чтобы в списке все элементы были равны нулю,кроме элемента с номером N. То есть запускаю так: ?- check_str(,2,1) здесь 2 индекс...

Рекурсивная функция возвращающая значение элемента последовательности Фибоначчи с заданным номером
1.Создайте функцию, которая принимает в качестве аргумента натуральное число N и возвращает значение элемента последовательности Фибоначчи...

Удаление элемента перед заданным в двусвязном списке
Здравствуйте! написал метод: public void delete_before(List list, Node node) { if(node.prev == null) return; if(node.prev.prev ==...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru