Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477

Двунаправленный список однонаправленных упорядоченных подсписков

16.02.2009, 15:43. Показов 4715. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Двунаправленный список однонаправленных упорядоченных подсписков. Реализация задачи должна быть только с применением динамических структур. Дополнительно реализовать:
  • Нахождение произведения всех элементов указанного подсписка.
  • Разбиение n-го подсписка на два подсписка отличающихся не более, чем на один элемент.
  • Найти количество элементов в n-ом подсписке, стоящих после элемента с ключом k.
Плаз,подскажите,что за подсписки и где про них есть материал?

ребят,ну что никто не знает,а то я всю голову себе поламала...

я знаю есть человек,который знает ответ...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2009, 15:43
Ответы с готовыми решениями:

Из составного списка сделать простой список, освобождая исходный список от подсписков
Задание Напишите программу, которая из составного списка делает простой список, освобождая исходный список от подсписков. В prolog...

Получить список списков и вернуть список из N-х элементов подсписков
Доброго времени суток! пожалуйста помогите с функциональным программированием! ^_^ Условие задачи: напишите функцию ] -> Int...

Из двух однонаправленных списков сформировать новый список
Из двух однонаправленных списков сформировать новый список, следующим образом: сначала записать четные по индексу элементы первого списка,...

25
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
16.02.2009, 16:05
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
type
   odnosvyazniy_spisok=^spisok_os; // структура односвязного списка (в задаче идет как подсписок к двусвязному)
   spisok_os = record
   next:odnosvyazniy_spisok; // ссылка на следующий эл-т односвязного списка (на предыдущий нет, ибо односвязный)
   data:[тип данных односвязного списка]; // данные хранящиеся в ячейке списка
   end;
   
   dvuh_svyazniy_spisok=^spisok_ds; // структура основного двусвязного списка.
   spisok_ds = record
   next,prev:dvug_svyazniy_spisok;   // ссылки на следующий и предыдущий элемент двусвязного списка (оттого и двусвязный)
   begg:odnosvyazniy_spisok; // ссылка на первый элемент односвязного подсписка.
   end;
1
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
17.02.2009, 10:48  [ТС]
это всё хорошо,только где подсписок??

Добавлено через 16 часов 25 минут 20 секунд
а то я честно говоря не увидела...
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
17.02.2009, 11:01
Ну вот тот указатель который будет указывать из элемента двунаправленого списка, на однонаправленный:
Code
1
begg:odnosvyazniy_spisok;
Для Вас уже сделали описание, Вам осталось почитать про то как создаются такие списки и всё... Смотрите тут...
1
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
17.02.2009, 13:14  [ТС]
мне неясна вот эта строчка
Pascal
1
data:[тип данных односвязного списка];
её что так и писать??
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
17.02.2009, 13:20
Ну я не знаю, если вы пишете такое то встаёт вопрос вы знаете Паскаль?
Xentar написал так из-за того, что он не знает какую вы будете хранить информацию в вашем списке (integer,real,byte,word,longint,record.. .)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.02.2009, 13:21
её что так и писать??
Тип, раз у Вас числа, то это мне кажется integer, real и т.д.
1
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
17.02.2009, 16:46  [ТС]
я думаю,что лучше integer,спасибо вам

Добавлено через 3 часа 21 минуту 15 секунд
ребята,я теперь столкнулась с тем,а как умножить,ведь элементов n?
0
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
17.02.2009, 17:05
Вместо цикла for используешь
repeat
или
while
условием выхода будет возвращение к начальному элементу. (если делаешь циклический список)
или значение null (nil) (ссылка на несуществующий эл-т. присутствует в начале списка (предыдущий элемент не существует) и в конце списка (так как следующий после последнего элемент не существует)
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
17.02.2009, 17:55  [ТС]
у меня линейный список....

типа вот так?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Procedure proizvedenie; 
var  
 i,n: integer;  
 proiz: real;  
begin  
 clrscr;  
 proiz:=1;  
 write('Vvedite N: ');  
 readln(n);  
 for i:=1 to n do  
 proiz:=proiz*i;  
 writeln('Proizvedenie=',proiz);  
 readkey;  
end.
или нет?
0
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
18.02.2009, 10:53
...................
структуру списков я написал.
Видимо ты совсем не работала со списками.
...................
n - у тебя уже есть ! ибо список имеет ограниченную длинну
про цикл FOR - ЗАБУДЬ !!!
...................
обращение к элементам списка производится таким образом
Pascal
1
S^.data //где S - указатель вашего списка, а data - данные хранящиеся в данном элементе списка
...................
Список состоящий из одного элемента выглядит так.
однонаправленный
1й элемент -> null

двунаправленный
null <- 1й элемент -> null
ибо каждый элемент списка имеет ссылку на следующий (и на предыдущий, если список двунаправленный)
значит в списке с одним элементом
Pascal
1
S^.next = null// почему next ?? - смотри описание структуры постом выше
следоваетельно можно сделать так
Pascal
1
2
3
4
5
6
7
var P: real;
//....... 
P:=1 // присваиваем произведению 1 чтоб при перемножении на первый эл-т списка получился тот же ел-т.
repeat // начало цикла
P:=P*S^.data; // здесь считается произведение
S:=S^.next; // здесь S, указатель на эл-т списка, переходит к следующему элементу.
until S=null; // когда он станет равным nill - не существующий элемент, т.е. выйдет за пределы списка - цикл остановится.
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
18.02.2009, 11:54  [ТС]
попытаюсь разобраться,а насчет списков я работала с ними,но мне они очень тяжело даються,поэтому,если что я буду консультироваться
0
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
19.02.2009, 12:12
Ты представь что у тебя есть несколько пронумерованных полочек, в каждом по три ящичка.
В первом лежит бумажка с номером предыдущей полки
Во втором какая то цифра ( данные ) (может быть даж деньги)
В третьем номер следующей полки.

У тебя в руках есть номер первой полки.

Влезаешь в средний ящичек с надписью данные и берешь бумажку - читаешь.
Дальше залезаешь в ящичек с надписью "следующая полка" и узнаешь с какой следующей полки надо прочитать данные

В качестве указателя (S - у меня в посте выше) - будешь ты сама - беря бумажку из ящичка "next" (следующий) - ты переходишь к следующей полке.
Pascal
1
S:=S^.next;
В принципе вот. примерно так, если брать аналогию из реальной жизни
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
19.02.2009, 13:53  [ТС]
а что значит "Разбиение n-го подсписка на два подсписка отличающихся не более, чем на один элемент."
Это типа два подсписка только один больше другого на один элемент,так что ль или 2 одинаковых подсписка,только 1 элемент разный?
0
Of Wolf and Man
 Аватар для Xentar
999 / 198 / 5
Регистрация: 09.07.2008
Сообщений: 1,784
19.02.2009, 15:57
Эту фразу можно интерпретировать по разному....
1. у тебя будет 2 одинаковых по длинне списка один в один, только один из эл-тов будет разный.
2. второй список будет на 1 эл-т больше первого, или наоборот

Сделай как нибудь, если придерутся переделай.
Или сразу пытай препода, на предмет того что он(она) имел(а) ввиду.
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
19.02.2009, 17:30  [ТС]
кстати,может совместить эти 2 варианта?
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
20.02.2009, 19:39  [ТС]
подскажите плиз алгоритм как разбить подсписок на 2 подсписка?

Добавлено через 1 час 41 минуту 30 секунд
и алгоритм нахождения кол-ва элементов в n-ом подсписке?
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
20.02.2009, 22:27
Цитата Сообщение от Дашустрик Посмотреть сообщение
и алгоритм нахождения кол-ва элементов в n-ом подсписке?
Ну если Вы задаёте такой вопрос, то получается вы ещё не совсем понимаете структуру списка, у него есть особенность его последний элемент указывает на nil, а это можно использовать, делайте цикл
Code
1
2
3
4
5
6
 kol:=0;
 while указатель<>nil do
 begin
  inc(kol);
  указатель:=указатель_на_следующий_элемент
 end;
На выходе kol=количеству_элементов
З.Ы. и да, не забудьте стать в начало подсписка, т.е. наш "указатель" В начале должен стоять на самом первом элементе
0
Дашики
 Аватар для Дашустрик
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
22.02.2009, 03:30  [ТС]
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Code
1
2
3
4
5
6
 kol:=0;
 while указатель<>nil do
 begin
  inc(kol);
  указатель:=указатель_на_следующий_элемент
 end;
На выходе kol=количеству_элементов
З.Ы. и да, не забудьте стать в начало подсписка, т.е. наш "указатель" В начале должен стоять на самом первом элементе
только по условию вместо указателя вписать ключ k?
а как быть с разбиением подсписка на 2,с отличающимся 1 элементом,я честно не очень понимаю?
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
22.02.2009, 16:20
Цитата Сообщение от Дашустрик Посмотреть сообщение
только по условию вместо указателя вписать ключ k?
Нет, я вам привёл алгоритм нахождения количества элементов в списке, а вам же нужно после какого-то элемента с ключом К, тогда пишем так
Code
1
2
3
4
5
6
7
8
9
10
 while (указатель<>nil) or (указатель.data<>K) do
  указатель:=указатель_на_следующий_элемент;
{После такой операции наш указатель стоит на элементе с информационной частью К}
{Ну а теперь до конца считаем...}
 kol:=0;
 while указатель_на_след_элем<>nil do {обычно указатель.next<>nil do}
 begin
  inc(kol);
  указатель:=указатель_на_следующий_элемент
 end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.02.2009, 16:20
Помогаю со студенческими работами здесь

список подсписков
Аргумент функции - N. Результат - список подсписков (всего N подсписков). Первый подсписок - единица, второй подсписок - две двойки, третий...

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

Clojure Список глубины подсписков
Написать функцию, выводящую список глубины подсписков (атом – глубина 0). Помогите блондинке, пожалуйста. =)

Составить список из максимумов подсписков.
Помогите пожалуйста решить задачу на Турбо Прологе! Сформировать список L1 из элементов: максимальный элемент всего списка L, ...

Список из числовых элементов с учетом подсписков
Доброго времени суток! Помогите, пожалуйста, найти ошибку в коде. Задача в следующем: Создать функцию, создающую список только из...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
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. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru