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

Односвязной список и реализация поиска в нём

01.12.2019, 20:51. Показов 1106. Ответов 8
Метки нет (Все метки)

Добрый день, возможно мой вопрос будет совсем глупый, но мне ничего в голову не приходит, как реализовать поиск в списке через консоль, чтобы пользователь мог написать, какой ему нужен элемент в списке и тот вывел ему. Помогите пожалуйста, гугл не помогает
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
#include <iostream>
#include <string>
using namespace std;
 
template <typename T>
class List
{
public:
    List();
    ~List();
 
    void push_back(T data);
    int GetSize() { return Size; }
    T& operator[](const int index);
private:
    template <typename T>
    class Node
    {
    public:
        Node* pNext;
        T data;
 
        Node(T data = T(), Node *pNext = nullptr)
        {
            this->data = data;
            this->pNext = pNext;
        }
 
    };
    int Size;
    Node <T> *head;
};
template <typename T>
List<T>::List()
{
    Size = 0;
    head = nullptr;
}
template <typename T>
List<T>::~List()
{
 
}
template<typename T>
void List<T>::push_back(T data)
{
    if (head == nullptr)
    {
        head = new Node<T>(data);
    }
    else
    {
        Node<T>* current = this->head;
 
        while (current->pNext != nullptr)
        {
            current = current->pNext;
        }
        current->pNext = new Node<T>(data);
    }
    Size++;
}
template<typename T>
T& List<T>::operator[](const int index)
{
    int counter = 0;
    Node<T> *current = this->head;
    while (current != nullptr)
    {
        if (counter == index)
        {
            return current->data;
        }
        current = current->pNext;
        counter++;
    }
}
 
int main()
{
    List<int> lst;
    int numbersCount;
    cin >> numbersCount;
    for (int i = 0; i < numbersCount; i++)
    {
        lst.push_back(rand() % 10);
    }
 
    for (int i = 0; i < lst.GetSize(); i++)
    {
        cout << lst[i] << endl;
    }
    
 
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2019, 20:51
Ответы с готовыми решениями:

Создание бинарного дерева и реализация поиска максимального и минимального элемента в нем
Прошу помощи в работе с деревьями. Задача состоит в том, что нужно создать бинарное дерево(оно...

8.3: Дин.список и строка поиска в нем ?
Случайно заметил сегодня, что в форме выбора в дин.списке есть свойство &quot;СтрокаПоиска&quot; ее можно...

Реализация дерева поиска список сыновей
Добрый день. Нужно создать 2-а дерева поиска и хранить их &quot;списком сыновей&quot;. В нужно вставить в А...

решил создать свой список, с возможностью поиска в нем и доступом к элементу по индексу
Здраствуйте. Вот решил создать свой список, с возможностью поиска в нем и доступом к элементу по...

8
Just Do It!
3374 / 1838 / 618
Регистрация: 23.09.2014
Сообщений: 5,828
01.12.2019, 21:04 2
SnikRix, скомпилил ваш код,
хз, у меня он работает(один запуск):
(выкинул все на что ругался мой GCC)
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
#include <iostream>
#include <string>
using namespace std;
 
template <typename T>
class List
{
public:
    List();
    ~List();
 
    void push_back(T data);
    int GetSize() { return Size; }
    T& operator[](const int index);
private:
 
    class Node
    {
    public:
        Node* pNext;
        T data;
 
        Node(T data = T(), Node *pNext = nullptr)
        {
            this->data = data;
            this->pNext = pNext;
        }
 
    };
    int Size;
    Node *head;
};
template <typename T>
List<T>::List()
{
    Size = 0;
    head = nullptr;
}
template <typename T>
List<T>::~List()
{
 
}
template<typename T>
void List<T>::push_back(T data)
{
    if (head == nullptr)
    {
        head = new Node(data);
    }
    else
    {
        Node* current = this->head;
 
        while (current->pNext != nullptr)
        {
            current = current->pNext;
        }
        current->pNext = new Node(data);
    }
    Size++;
}
template<typename T>
T& List<T>::operator[](const int index)
{
    int counter = 0;
    Node *current = this->head;
    while (current != nullptr)
    {
        if (counter == index)
        {
            return current->data;
        }
        current = current->pNext;
        counter++;
    }
}
 
int main()
{
    List<int> lst;
    int numbersCount;
    cin >> numbersCount;
    for (int i = 0; i < numbersCount; i++)
    {
        lst.push_back(rand() % 10);
    }
 
    for (int i = 0; i < lst.GetSize(); i++)
    {
        cout << lst[i] << endl;
    }
    
    system("pause");
    return 0;
}
0
3 / 3 / 0
Регистрация: 22.11.2018
Сообщений: 39
01.12.2019, 21:08  [ТС] 3
XLAT, я хочу реализовать поиск в нём с консоли, любого элемента из списка, а он лишь выводит все значения, в этом проблема
0
Just Do It!
3374 / 1838 / 618
Регистрация: 23.09.2014
Сообщений: 5,828
01.12.2019, 21:15 4
Цитата Сообщение от SnikRix Посмотреть сообщение
XLAT, я хочу реализовать поиск в нём с консоли, любого элемента из списка, а он лишь выводит все значения, в этом проблема
поменяйте main на это:
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
...
 
int main()
{
    List<int> lst;
    int numbersCount = 100; //cin >> numbersCount;
    for (int i = 0; i < numbersCount; i++)
    {
        lst.push_back(rand() % 10);
    }
 
    for (int i = 0; i < lst.GetSize(); i++)
    {   cout << lst[i] << " ";
    }   cout << "\n\n";
    
    
    int num = 4; cout << "num = "; cin >> num;
    for (int i = 0; i < lst.GetSize(); i++)
    {   if(lst[i] == num)
        {   cout << "YES!\n";
            goto m;
        }
    }
    cout << "NO! \n";
m:
    system("pause");
    return 0;
}
так?
0
3 / 3 / 0
Регистрация: 22.11.2018
Сообщений: 39
01.12.2019, 21:23  [ТС] 5
XLAT, не совсем, мне нужно, чтобы он писал какое значение в определенном элементе. Например, у меня есть список из 10 чисел, и пользователь, мог написать, что ему нужно число под номер 7, и тот выдаст ему число, которое находится на 7 месте в списке
0
Just Do It!
3374 / 1838 / 618
Регистрация: 23.09.2014
Сообщений: 5,828
01.12.2019, 21:30 6
Цитата Сообщение от SnikRix Посмотреть сообщение
Например, у меня есть список из 10 чисел, и пользователь, мог написать, что ему нужно число под номер 7, и тот выдаст ему число, которое находится на 7 месте в списке
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
...
int main()
{   setlocale(0, "");
    
    List<int> lst;
    int numbersCount = 10; //cin >> numbersCount;
    for (int i = 0; i < numbersCount; i++)
    {
        lst.push_back(rand() % 10);
    }
 
    for (int i = 0; i < lst.GetSize(); i++)
    {   cout << lst[i] << " ";
    }   cout << "\n\n";
    
    cout << "Введите индекс(нумерация от нуля): ";
    int num; cout << "num = "; cin >> num;
    cout << lst[num] << endl;
    
    system("pause");
    return 0;
}
 
так?
0
3 / 3 / 0
Регистрация: 22.11.2018
Сообщений: 39
01.12.2019, 21:35  [ТС] 7
XLAT, да, большое спасибо, это то что мне нужно, только можно пожалуйста сделать ошибку в консоли, если num вводится больше чем есть элементов? Меня в первый запуск исключение заставило вздрогнуть
0
Just Do It!
3374 / 1838 / 618
Регистрация: 23.09.2014
Сообщений: 5,828
01.12.2019, 21:57 8
Лучший ответ Сообщение было отмечено SnikRix как решение

Решение

SnikRix,
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
int main()
{   setlocale(0, "");
    
    List<int> lst;
    int numbersCount = 10; //cin >> numbersCount;
    for (int i = 0; i < numbersCount; i++)
    {
        lst.push_back(rand() % 10);
    }
 
    for (int i = 0; i < lst.GetSize(); i++)
    {   cout << lst[i] << " ";
    }   cout << "\n\n";
    
    while(true)
    {   cout << "\nВведите индекс(нумерация от нуля): ";
        int num; cout << "num = "; cin >> num;
        if(0 > num || num >= lst.GetSize())  
             cout << "ERROR:Индекс не существует!\n";
        else cout << lst[num] << endl;
    }
    
    system("pause");
    return 0;
}
1
3 / 3 / 0
Регистрация: 22.11.2018
Сообщений: 39
01.12.2019, 22:24  [ТС] 9
XLAT, большое спасибо!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 22:24
Помогаю со студенческими работами здесь

Реализация функции поиска нужной услуги по заданным критериям поиска.
Получил задание на тему ArrayList, не получается сделать целиком...Вот задание помогите кто чем...

Реализация поиска по сайту - переход по станицам с сохранением запроса поиска
Всем известно что все запросы пользователя в данном случае хранятся в _GET массиве. Проблема такова...

Реализация поиска
Хотел сделать поиск по таблице поступления Вот код : begin ...

Реализация поиска в приложении
Есть страница на которой можно найти статью, но все статьи находятся на сервере. Как лучше...


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

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

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