|
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
|
||||||
Объединение (конкатенация) двух односвязных списков17.10.2011, 00:15. Показов 14230. Ответов 16
Метки нет (Все метки)
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере: сцепить два связанных списка данных символьного типа, через функцию concatenate.
Списки ввожу до того момента, пока не введется '0'. Вот то, что получилось:
0
|
||||||
| 17.10.2011, 00:15 | |
|
Ответы с готовыми решениями:
16
Объединение двух списков
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,703
|
|
| 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,703
|
|
| 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,703
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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,703
|
|
| 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,703
|
|
| 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,703
|
|
| 04.11.2011, 05:45 | |
|
Правило перое:
1) ты должен найти данные, на которых твоя программа спотыкается. Правило второе: 2) ты должен упростить их до минимума ...А я пока в упор не вижу чё надо вводить чтобы убедиться- да, вот конкантекации не происходит.
0
|
|
| 04.11.2011, 05:45 | |
|
Помогаю со студенческими работами здесь
17
Объединение двух списков в один без повтора элементов (С++)
Пересечение и разность односвязных списков Сортировка линейных(односвязных) списков Чем отличается сортировка односвязных списков от сортировки двусвязных? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|