11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359

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

03.11.2016, 18:17. Показов 4711. Ответов 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,874
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru