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

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

03.11.2016, 18:17. Показов 4907. Ответов 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
9007 / 4708 / 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
9007 / 4708 / 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
9007 / 4708 / 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
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
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
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru