2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34

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

18.09.2018, 21:56. Показов 4307. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru