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

Идеология односвязного списка

03.11.2016, 18:17. Показов 4467. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здарова!

Посмотрел, что такое односвязный список и возникли естественно кое-какие чисто идеологические вопросы.
Насколько я понял, односвязный список - это аналог простого массива, только память выделяется динамически, но в отличае от дин. массива не поддерживается функция вставки и удаления постфактум (то есть: мы задали размер дин. массива вначале и больше менять его размер не можем, а размер односвязного списка - можем)

Еще отличае в том, что в простом массиве, элемент - просто число, а в односвязном - это может быть все, что угодно, например, объект класса или структуры.

Вопрос в том, правильно ли я понял эти моменты и если да, то зачем нам нужен односвязный список, можно ведь просто воспользоваться массивом типа Vector, он точно также динамически меняет свой размер и его элементами могут быть любые типы данных.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2016, 18:17
Ответы с готовыми решениями:

Удаление элементов из односвязного списка списка
Привет всем знатокам, суровым программистам и профессионалам своего дела. Засел за реализацией списка и что то пока не могу понять. Задача...

Копирование односвязного списка
в классе содержится односвязный список. соответственно пишу для него оператор присваивания. подскажите, как можно скопировать односвязный...

Вывод односвязного списка на C
помогите исправить ошибку!не выводит последний элемент списка. пишет: В экземпляре объекта не задана ссылка на объект. вот листинг...

41
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
04.11.2016, 09:48  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zigfrid Посмотреть сообщение
Я думал, что в массиве это сделать нельзя, а в списке можно, нет?
Цитата Сообщение от ValeryS Посмотреть сообщение
тоже нельзя, однотипные данные
для хранения нужно разные массивы и списки тоже разные
Цитата Сообщение от IGPIGP Посмотреть сообщение
Зато теперь правильно думаете, а это главное.
Какая сложная тема...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.11.2016, 09:52
Цитата Сообщение от Zigfrid Посмотреть сообщение
Какая сложная тема...
Забудьте на время про списки. Поучите массивы. Если это получится, с остальным не будет проблем. Массивы это встроенный тип и без их понимания, - просто никуда.
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
04.11.2016, 09:57  [ТС]
IGPIGP, спасибо за совет, но я не совсем новичок в программировании и примерно пару сотен программ уже написал) Правда, почти все численные..
К спискам перешел просто для расширения кругозора
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.11.2016, 10:44
А я ещё новичок.
Вы пишете:
Цитата Сообщение от Zigfrid Посмотреть сообщение
но я не совсем новичок в программировании и примерно пару сотен программ уже написал
и это хорошо. Но вот с этим:
Цитата Сообщение от Zigfrid Посмотреть сообщение
в простом массиве, элемент - просто число, а в односвязном - это может быть все, что угодно, например, объект класса или структуры.
надо что-то делать. Пока Вы не начнёте создавать массивы структур и классов и не увидите как их инициализируют, не приступайте к другим контейнерам. Повторю: поучите массивы. Потом вернитесь к С-строкам (указатели на char)). Потом познакомьтесь с классом string. А потом контейнеры STL. Реализацию списков на указателях можно и раньше посмотреть, но только после массивов и указателей. Массивы и указатели это связанная тема. Без указателей не понять массивов. А списков и подавно. А шаблоны это вещи которые нужно смотреть хорошо понимая классы. Там одними численными типами не обойтись.
2
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
04.11.2016, 15:10
Цитата Сообщение от ValeryS Посмотреть сообщение
покажь
лехко

C++
1
std::variant<int, double> [] magic;
2
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.11.2016, 15:34
Цитата Сообщение от ValeryS Посмотреть сообщение
как будет выглядеть массив хранящий 3 инта 1 чар и 2 флоата?
http://www.boost.org/doc/libs/... ector.html
Не бейте. :black_eye.:
Хотя, мне сейчас кажется, что это не совсем то.

Добавлено через 3 минуты
Это не то, извиняюсь.
У Maxim Prishchepa правильно.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.11.2016, 15:48
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
лехко
Ага. Только оно variant содержит. Это не то, что имелось ввиду.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.11.2016, 16:08
Maxim Prishchepa, но это всё ещё только будет в C++17.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.11.2016, 16:12
Maxim Prishchepa,
Цитата Сообщение от gru74ik Посмотреть сообщение
но это всё ещё только будет в C++17.
Тогда вот.
1
04.11.2016, 16:17

Не по теме:


GbaLog-, годно:

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
//clang 3.7.0
 
#include "boost/variant.hpp"
#include <iostream>
 
class my_visitor : public boost::static_visitor<int>
{
public:
    int operator()(int i) const
    {
        return i;
    }
    
    int operator()(const std::string & str) const
    {
        return str.length();
    }
};
 
int main()
{
    boost::variant< int, std::string > u("hello world");
    std::cout << u; // output: hello world
 
    int result = boost::apply_visitor( my_visitor(), u );
    std::cout << result; // output: 11 (i.e., length of "hello world")
}

0
04.11.2016, 17:13

Не по теме:

gru74ik, годно выглядит только с точки зрения плюсов :D

Haskell
1
2
3
4
5
6
7
8
data IntOrString = I Int | S String
 
f :: IntOrString -> Int
f (I x) = x
f (S s) = length s
 
main :: IO ()
main = print $ f (S "hello world")

0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.11.2016, 19:52
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
лехко
осталось мелочь, сказать что такое
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
variant
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
04.11.2016, 20:45
Цитата Сообщение от ct0r Посмотреть сообщение
годно выглядит только с точки зрения плюсов
Можно visitor чисто из лябмд сделать, тогда будет почти как в хаскеле
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
04.11.2016, 22:58
Цитата Сообщение от Voivoid Посмотреть сообщение
Можно visitor чисто из лябмд сделать
Так это еще надо сделать/осилить, особенно если паттерн-матчинг не настолько тривиален
А какой процент народу адекватно осилит в плюсах рекурсивные структуры?
Haskell
1
2
3
4
5
6
7
8
9
data IntOrString = I Int | S String | IS IntOrString
 
f :: IntOrString -> Int
f (I x) = x
f (S s) = length s
f (IS is) = f is
 
main :: IO ()
main = print $ f (IS $ S "hello world")
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
04.11.2016, 23:14
Цитата Сообщение от ct0r Посмотреть сообщение
А какой процент народу адекватно осилит в плюсах рекурсивные структуры?
Ну, дык, плюсы-то мутабельные и необдимости в рекурсивных ADT в целом нет, но если уж прям очень хочется, то есть рекурсивный boost::variant, можно и то, что ты написал и классический рекурсивный список сделать

Добавлено через 56 секунд
Цитата Сообщение от ct0r Посмотреть сообщение
Так это еще надо сделать/осилить, особенно если паттерн-матчинг не настолько тривиален
Ну, я не спорю, но главное-то возможность таки есть
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
04.11.2016, 23:23
Цитата Сообщение от Voivoid Посмотреть сообщение
необдимости в рекурсивных ADT в целом нет
В некоторых случаях это удобно. Иначе бы и этого самого рекурсивного варианта в бусте и не было.
Сделать лямбдический синтаксис для рекурсивного варианта не так просто, если не использовать y-комбинатор из hana например. Могу ошибаться.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
04.11.2016, 23:31
Цитата Сообщение от ct0r Посмотреть сообщение
Сделать лямбдический синтаксис для рекурсивного варианта не так просто, если не использовать y-комбинатор из hana например. Могу ошибаться.
Как раз о чем-то таком вроде как недавно писали, я правда сам не читал пока - https://vittorioromeo.info/ind... art_2.html
Ну, в учетом того, что boost::hana уже попала в boost, то проблема не велика
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
05.11.2016, 00:02
а зачем лямбды для паттерн-матчинга... вот пример с cppreference.com
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
#include <variant>
#include <iostream>
#include <type_traits>
#include <iomanip>
#include <vector>
 
 
template<class T> struct always_false : std::false_type {};
 
using var_t = std::variant<int, long, double, std::string>;
 
int main() {
    std::vector<var_t> vec = {10, 15l, 1.5, "hello"};
    for(auto v: vec) {
        // void visitor, only called for side-effects
        std::visit([](auto&& arg){std::cout << arg;}, v);
 
        // value-returning visitor. A common idiom is to return another variant
        var_t w = std::visit([](auto&& arg) -> var_t {return arg + arg;}, v);
 
        std::cout << ". After doubling, variant holds ";
        // type-matching visitor: can also be a class with 4 overloaded operator()'s
        std::visit([](auto&& arg) {
            using T = std::remove_cv_t<std::remove_reference_t<decltype(arg)>>;
            if constexpr (std::is_same_v<T, int>)
                std::cout << "int with value " << arg << '\n';
            else if constexpr (std::is_same_v<T, long>)
                std::cout << "long with value " << arg << '\n';
            else if constexpr (std::is_same_v<T, double>)
                std::cout << "double with value " << arg << '\n';
            else if constexpr (std::is_same_v<T, std::string>)
                std::cout << "std::string with value " << std::quoted(arg) << '\n';
            else 
                static_assert(always_false<T>::value, "non-exhaustive visitor!");
        }, w);
    }
}
как-нибудь так можно будет извращаться... и это, кажись, не загорами совсем
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
05.11.2016, 00:07
Цитата Сообщение от tapochka Посмотреть сообщение
а зачем лямбды для паттерн-матчинга...
С лямбдами декларативнее
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
05.11.2016, 00:16
к моему большому удивлению, помнится, узнал, что паттерн-матчинг в C# 7 имеется... я думал эта привилегия лишь функциональных языков
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.11.2016, 00:16
Помогаю со студенческими работами здесь

Шаблон односвязного списка
Код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template &lt;typename T&gt; class List { private: struct node...

Вывод односвязного списка
Здравствуйте, помогите найти ошибку в функции. Выводит только первый элемент списка, даже если ты добавил больше.. Вводstruct List*...

Сортировка односвязного списка
Здравствуйте уважаемые киберфорумщики! Нужна срочная помощь!!! В общем у меня есть задача которую нужно сделать но нет ни знаний ни...

Сортировка односвязного списка
Как можно реализовать сортировку(быструю и пузырьковою в виде функций) структуры односвязного циклического списка, где обмен данными...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru