Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34

Кольцевой список: подсчитать количество элементов списка, у которых равные "соседи"

18.09.2018, 21:56. Показов 4285. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте, снова необходима ваша помощь со списками(очень туго идёт данная тема). У меня задание сформулированно так:

Сформировать кольцевой однонаправленный список L с заглавным элементом. Составить процедуру или функцию, которая подсчитывает количество элементов списка, у которых равные "соседи".

Не могли бы мне подсобить с заданием, и подкинуть какой-нибудь годной литературы по данной тематике?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2018, 21:56
Ответы с готовыми решениями:

Функция: подсчитать количество элементов кольцевого двунаправленного списка L, у которых равные соседи
Пусть L обозначает двунаправленный список с заглавным звеном. Описать функцию или процедуру, которая подсчитывает количество элементов...

Подсчитать количество элементов списка L, у которых равные "соседи"
процедура, которую нужно сделать: подсчитывает количество элементов списка L, у которых равные "соседи" (первый и последний...

Подсчитать количество элементов кольцевого списка, у которых равные "соседи"
Написать программу на Си: Дан кольцевой список. Описать функцию, которая подсчитывает количество элементов списка, у которых равные...

5
 Аватар для ДИМОНИЧ
16 / 10 / 7
Регистрация: 15.04.2018
Сообщений: 34
Записей в блоге: 1
20.09.2018, 12:21
Вопрос на вопрос: о самой структуре и смысле кольцевого списка говорить надо, или известна структура, основанная например на объектах пользовательского класса или на основе словаря например?
0
2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34
20.09.2018, 17:49  [ТС]
Подразумевается, что будут использованы пользовательские классы
0
 Аватар для ДИМОНИЧ
16 / 10 / 7
Регистрация: 15.04.2018
Сообщений: 34
Записей в блоге: 1
20.09.2018, 20:12
Лучший ответ Сообщение было отмечено Reywal как решение

Решение

Ну замечательно, значит имеем объекты класса:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class listItem(object):
    def __init__(self, value = None):
        self.value = value
        self.firstly = False
 
    def makeFirst(self):
        self.firstly = True
 
    def setNext(self, next):
        self.next = next
 
item =  listItem('Привет')
item2 =  listItem('Пока')
item.setNext(item2)
Смущает лишь одно, если список железно однонаправленный, то элемент не хранит ссылку на предыдущий. Соответственно, придется изговляться: запоминать значение текущего как предыдущий для следующего, для этого советую использовать буферный объект.

Кстати атрибут firstly используется для определения первенства и позволяет вовремя остановиться при переборе. Тут еще можно использовать... singleton, кажется так называется класс у которого может быть только один объект. Все ради того, чтобы не потерять элементы назначив два первых)

Добавлено через 15 минут
Стоит также учесть, что последний для первого так же является соседом как и второй, а предпоследний для последнего так же как и первый.
Python
1
2
3
4
5
6
7
8
9
buffIt = firstItem
count = 0
while not buffIt.next.firstly:
    if buffIt.value == buffIt.next.next.value:
        count += 1
        buffIt = buffIt.next 
else:
    if buffIt.value == buffIt.next.next.value:
        count += 1
Как то так, логика собрана на коленке, если есть желание отладить, то вперед) Но это актуально если не стоит задача сначала найти первый, тут используя флаг первенства firstly, разобраться не сложно.

Добавлено через 7 минут
косяк нашел, поэтому скидываю мой тестовый пример:
Python
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
class listItem(object):
    def __init__(self, value = None):
        self.value = value
        self.firstly = False
 
    def makeFirst(self):
        self.firstly = True
 
    def setNext(self, next):
        self.next = next
firstItem = listItem('Привет')
firstItem.makeFirst()
 
item =  listItem('Привет')
firstItem.setNext(item)
item2 =  listItem('Пока')
item.setNext(item2)
item2.setNext(firstItem)
 
buffIt = firstItem
count = 0
while not buffIt.next.firstly:
    if buffIt.value == buffIt.next.next.value:
        count += 1
        buffIt = buffIt.next
    else:    
        buffIt = buffIt.next 
else:
    if buffIt.value == buffIt.next.next.value:
        count += 1
print(count)
1
2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34
20.09.2018, 21:08  [ТС]
Окей, а, допустим в моём списке будет не два, а n элементов. Получается нужно будет ещё столько же объектов создавать или каким-то хитрым образом можно append-ить в обычный список, где и будут происходить все операции?
0
 Аватар для ДИМОНИЧ
16 / 10 / 7
Регистрация: 15.04.2018
Сообщений: 34
Записей в блоге: 1
20.09.2018, 21:12
Ваша задача, посчитать, формирование списка необходимо в основном для отладки. А вот с автоматикой пожалуйста
Python
1
item = {name:[value, name_next, firstly]}
Сие есть Ваша альтернатива структуры элемента, как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2018, 21:12
Помогаю со студенческими работами здесь

Подсчитать количество элементов двусвязного списка L, у которого равные «соседи»
Вот условия задачи Подсчитать количество элементов двусвязного списка L, у которого равные «соседи». я написал программу unit...

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

Написать функцию, которая подсчитывает количество элементов списка L, у которых равные "соседи"
Пусть L обозначает кольцевой однонаправленный список с удаленным заглавным звеном. Написать функцию, которая подсчитывает количество...

Подсчитать количество символов, у которых равные соседи в исходной строке
В общем, задача такая: подсчитать количество символов, у которых равные соседи в исходной строке. Первый и последний символы считать...

Кольцевой двунаправленный список: удалить все элементы, у которых одинаковые соседи
Дан кольцевой двунаправленный список. Из списка L удалить все элементы у которых одинаковые соседи (первый и последний элемент считать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru