Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.11.2021
Сообщений: 5

Функция подсчитывающая количество элементов в двусвязном списке

13.11.2021, 19:48. Показов 3429. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе написать функцию, которая по произвольному указателю на
один из элементов двусвязного списка подсчитывает количество элементов в
этом списке.
Скиньте кто нибудь код на С++ пожалуйста, очень нужна ваша помощь, обратиться не к кому больше
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2021, 19:48
Ответы с готовыми решениями:

Функция подсчитывающая количество положительных элементов в массиве
Подсобите выполнить задачи. Я немного прогуливал, а завтра сдавать лабы по инфе. Написать функцию, под¬считывающую количество...

функция, подсчитывающая количество слов в списке
Написать функцию, подсчитывающую количество слов в списке, которые начинаются с той же буквы, что и следующее слово. (на паскале)...

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

4
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
13.11.2021, 22:22
чисто теоретически
это если самописный класс списка и там есть поля prev -предыидущий элемент, next-следующий для заданного
(и если нет static head; как обычно делают- указатель на первый элемент)
(и если речь не про какой нибудь контейнер)

то как я понимаю надо пройтись от заданного элемента к первому (у которого отсутствует предидущий элемент)
C++
1
2
start=pointer;//pointer-произвольный элемент
while(start->prev) start=start->prev;
и затем пройтись от первого к последнему(у которого отсутствует следующий элемент)
C++
1
2
3
4
5
int count=0;
while(start->next){
++count;
start=start->next;
}

Не по теме:

но мб ерунду сказал, т.к. я списки сам не писал, только примеры смотрел :)

1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.11.2021, 23:45
Цитата Сообщение от sdf45 Посмотреть сообщение
но мб ерунду сказал, т.к. я списки сам не писал, только примеры смотрел
Никогда не поздно написать ) Особенно "экзотика" - кольцевые списки.

Так как список двусвязный, два цикла.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned ElementsCount(Node * node){
    unsigned count = 0;
    Node * start = node;
    if (!node){
        ++count; // текущий элемент
           // первый цикл влево
        while(node->prev!=nullptr){
            ++count;
            node = node->prev;
        }
        node = start;
        while(node->next!=nullptr){
            ++count;
            node = node->next;
        }
    }
    return count;
}
Добавлено через 4 минуты
Цитата Сообщение от sdf45 Посмотреть сообщение
(и если нет static head; как обычно делают- указатель на первый элемент)
Обычно да, два указателя для head и tail - не жалко.
2
0 / 0 / 0
Регистрация: 13.11.2021
Сообщений: 5
14.11.2021, 10:37  [ТС]
почему-то выводит 0
C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<iostream>
using namespace std;
struct node {
    int c;
    node* next, * prev;
};
 
unsigned ElementsCount(node* cnode);
int main() {
    node *head = NULL, *tail = NULL, *n=NULL;
    n = new node;
    n->c = rand() % 9 + 1;
    n->prev = NULL;
    head = n;
    tail = n;
    for (int i = 1; i <= 10; i++)
    {
        n = new node;
        n->c= rand() % 9 + 1;
        n ->prev=tail;
        tail->next = n;
        tail = n;
    }
    n = head;
    for (int i = 1; i <= 10; i++)
    {
        cout << n->c << endl;
        n = n->next;
    }
    cout << "count " << ElementsCount(n);
}
unsigned ElementsCount(node* cnode)
{
    unsigned count = 0;
    node* start = cnode;
    if (!cnode) {
        ++count; // текущий элемент
           // первый цикл влево
        while (cnode->prev != nullptr) {
            ++count;
            cnode = cnode->prev;
        }
        cnode = start;
        while (cnode->next != nullptr) {
            ++count;
            cnode = cnode->next;
        }
    }
    return count;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.11.2021, 12:34
Лучший ответ Сообщение было отмечено shpekser как решение

Решение

поправил
C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
using namespace std;
struct node {
    int c;
    node* next, * prev;
};
 
unsigned ElementsCount(node* cnode);
int main() {
    node *head = nullptr, *tail = nullptr, *n=nullptr;
    n = new node;
    n->c = rand() % 9 + 1;
    n->prev = nullptr;
    head = n;
    tail = n;
    for (int i = 1; i < 10; i++)
    {
        n = new node;
        n->c = rand() % 9 + 1;
        n->prev = tail;
        n->next = nullptr;
        tail->next = n;
        tail = n;
    }
    n = head;
    while(n)
    {
        cout << n->c << ' ';
        n = n->next;
    }
    // ElementsCount(n);   !!! n == nullptr, нужен валидный узел
    cout << endl << "count " << ElementsCount(tail);
}
unsigned ElementsCount(node* cnode)
{
    unsigned count = 0;
    node* start = cnode;
    if (cnode) { // исправил (!cnode)
        ++count; // текущий элемент
           // первый цикл влево
        while (cnode->prev != nullptr) {
            ++count;
            cnode = cnode->prev;
        }
        cnode = start;
        while (cnode->next != nullptr) {
            ++count;
            cnode = cnode->next;
        }
    }
    return count;
}
Добавлено через 7 минут
освободить память можно так
node * tmp = nullptr;
n = head;
while(n){
tmp = n->next;
delete n;
n = tmp;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2021, 12:34
Помогаю со студенческими работами здесь

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

Циклический сдвиг элементов в двусвязном списке.
Здравствуйте,форумчане) Хотелось бы попросить тех, кому не трудно, решить задачку) Вот условие: &quot;Написать программу для...

В двусвязном списке поменять порядок элементов
В двусвязном списке поменять порядок элементов (1-ый становится последним, 2-ой – предпоследним и т.д.). Обратите внимание: менять значение...

Свап соседних элементов в двусвязном списке
Есть реализация двусвязного списка struct spisok { info field; spisok *next; spisok *prev; }; где info - структура с...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru