|
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
|
||||||
Объединение (конкатенация) двух односвязных списков17.10.2011, 00:15. Показов 14312. Ответов 16
Метки нет (Все метки)
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере: сцепить два связанных списка данных символьного типа, через функцию concatenate.
Списки ввожу до того момента, пока не введется '0'. Вот то, что получилось:
0
|
||||||
| 17.10.2011, 00:15 | |
|
Ответы с готовыми решениями:
16
Объединение двух списков
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 17.10.2011, 00:51 | |
|
Допустим, первый список (схематично) из двух элементов
a->b второй c->e У меня несколько вопросов: на что должен указывать b.p (и соответственно c.d) и каков должен быть конечный список (a->b->c->e или как? И если да, то на что должен указывать в таком случае e.d? )
0
|
|
|
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
|
|
| 17.10.2011, 00:57 [ТС] | |
|
kravam, список должен состоять из a,b,c,e, что за b.p и c.d?
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 17.10.2011, 01:01 | |
|
a->b->c->e?
Ну поля, ё. У тебя же d это указатель, на что он указывать должен?: Добавлено через 1 минуту struct node{ char d; node *p; }; а, ошибся я; p указатель на что должен указывать?
0
|
|
| 17.10.2011, 01:03 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
|
||
| 17.10.2011, 01:07 [ТС] | ||
|
kravam,
silentnuke, да, p - это следующий элемент Добавлено через 3 минуты
0
|
||
|
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
|
||
| 17.10.2011, 01:17 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
|
|
| 17.10.2011, 01:24 [ТС] | |
|
silentnuke, не совсем пойму, где бесконечный цикл, я pop'ом достаю поочередно элементы из списков и push'ем помещаю в новый
0
|
|
|
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
|
|||||||
| 17.10.2011, 01:38 | |||||||
|
Добавлено через 8 минут
1
|
|||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 17.10.2011, 02:20 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
silentnuke, дядя, я спрашивал за ПОСЛЕДНИЙ указатель. Куда бы он указывал у меня , я знаю. Куда он должен указывать у ТС- один Бог ведает. может у него закольцованный список.
Но как бы то ни было. Введём:
надписи:
По запуску программы мы не увидим
Но вызовы pop совершенно одинаковы! И даже передаются одинаковые адреса! Почему первый pop отрабатывает нормально, а второй даёт сбой? Делаем предположение: Значит, между вызовами pop меняется СОДЕРЖАНИЕ адресов. Причём меняется АВАРИЙНО так, что второй pop не может сработать. Где находится участок кода, в котором могло бы аварийно поменяться содержание адресов? (И этот участок должен находиться МЕЖДУ вызовами pop) Правильно. Этот участок- сама функция pop. При её первом вызове что-то там нехорошее происходит. Смотрим на функцию pop. Она принимает параметр top, равный top2, проверяем это, пишем так:
Обращаю твоё внимание на одну очень важную вещь: мы убедились, что pop даёт крах при ВТОРОМ вызове, но исследовать будем ПЕРВЫЙ ВЫЗОВ, ибо, как мы поняли, именно в первый раз аварийно меняется содержимое top! (или top2, что то же самое) Итак, пошли в функцию смотреть, что такого происходит с этим адресом:
Введите 1й список q 0 Введите 2й список w 0 top2= 22ff54 top= 22ff54 __*top= 0 top2= 22ff54 wwwwwwwwww top= 22ff54 Ноль! А в следующий вызов pop мы также вызовем её со значением 22ff54. разыменуем и получим 0, с котрого безуспешно будем пытаться взять вот это:
Ввыод: при первом вызове pop НЕПРАВИЛЬНО писать это:
Добавлено через 16 минут В обшем, я с самого начал хотел написать, что нужна функция вывода списка- щас бы проверили. Короче, размышляя так. приходим к выводу, что эти условия неверны:
Добавлено через 3 минуты НУ то есть мы делаем неправильно одно из двух: это
Ну а дальше уж сам сообразишь что менять.
1
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
|
|
| 17.10.2011, 03:03 | |
|
kravam, ошибка была в проверке, выше уже выложил решение.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 3
|
||||||
| 03.11.2011, 17:59 | ||||||
|
у меня похожая задача, но на Си: напишите программу, выполняющую конкатенацию двух связанных списков символов. программа должна включать функцию concatenate, которой в качестве аргументов передаются указатели на оба списка и она присоединяет второй список к первому.
Вот что я написал:
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 03.11.2011, 19:25 | |
|
Правило перое:
1) ты должен найти данные, на которых твоя программа спотыкается. Правило второе: 2) ты должен упростить их до минимума То есть, допустим программа спотыкается на списках (грубо говоря ![]() 2->3->4 3->5 В данном контектсе упростить- значит уменьшить списки до минимума- до одного или двух (естессно, программа должна продолжать виснуть) И потом, если не найдушь ошибку говорить: вот у меня список 1->2 и 1->NULL, не присоединяется ни фига. Согласись, гораздо проще работаь с маленькими данными, нежели с большими? И не говори, что программа всегда не присоединяет. Тут конкретика нужна. Иначе всю эту подготовительную работу дожен будет проделать отвечающий (напрример, я), а меня с некоторых пор стало ломать это делать.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 3
|
|
| 03.11.2011, 19:59 | |
|
Ок! я просто не знал, только что буквально зарегистрировался на форуме.
В программе все работает, но проблема, мне кажется в функции объединения списков concatenate. функция получает два указателя на начало первого списка (startPtr)и на начало второго списка (startPtr2). Дальше в while я дохожу до конца первого списка, т.е. до указателя последнего узла первого списка, который равен NULL и в if присваиваю ему указатель на начало второго списка: curPtr->nextPtr=startPtr2; Присваивание происходит, т.к.проверял, распечатывается второй список. Т.е., если я правильно понимаю, связывание двух списков произошло. Потом в main запускаю функцию печати списка с параметром указателем на начало списка printList(startPtr) - печатается только первый список, а второй присоединенный -нет! ![]() вот в этом и загвоздка. не могу понять почему.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 03.11.2011, 20:07 | |
|
Чё надо делать, я сказал.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 3
|
|
| 04.11.2011, 01:48 | |
|
хмм.. че то не понятно, что от меня требуется
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 04.11.2011, 05:45 | |
|
Правило перое:
1) ты должен найти данные, на которых твоя программа спотыкается. Правило второе: 2) ты должен упростить их до минимума ...А я пока в упор не вижу чё надо вводить чтобы убедиться- да, вот конкантекации не происходит.
0
|
|
| 04.11.2011, 05:45 | |
|
Помогаю со студенческими работами здесь
17
Объединение двух списков в один без повтора элементов (С++)
Пересечение и разность односвязных списков Сортировка линейных(односвязных) списков Чем отличается сортировка односвязных списков от сортировки двусвязных? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита табличной части. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|