Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
4 / 4 / 3
Регистрация: 30.09.2012
Сообщений: 63

Объясните пожалуйста действия с двусвязным списком типа кольцо

24.03.2013, 19:51. Показов 957. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
объявляем

C
1
2
3
4
5
struct RING
{
    char surname[10];                                                               
    RING *l, *r;                                                                    
};
На что указывают указатели l и r и почему они типа RING

Вот функция создания кольца:

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
RING *create(RING *s, int amount)
{
    int i=1;
    RING *s1, *s2;
    printf("\nВведите имена солдат\n");
    if(!s)                                                  
    {
        s=(RING*)malloc(sizeof(RING));                      
        printf("%d-й:\t", i);
        get_str(s->surname);                                
        s->r=s;                                             
        s->l=s;                                             
        amount--;
 
    }
    s2=s;
    while(amount)
    {
        s1=(RING*)malloc(sizeof(RING));                    
        printf("%d-й:\t", ++i);
        get_str(s1->surname);                               
        s2->r=s1;                                           
        s1->l=s2;                                          
        s2=s1;                                              
        amount--;
    }
    s2->r=s;                                                
    s->l=s2;                                                
    return s;
}
Для чего мы в ней заводим дополнительно две переменных s1 и s2? Когда мы ввели имя первого солдата, зачем мы делаем сие операции?

C
1
2
s->r=s;                                             
s->l=s;
В функции удаления элемента из кольца:

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
RING *del(RING *s, int step)
{
    int n=step;
    char c;
    RING *s1=s;
    do 
    {
        printf("\nВведите направление движения по кольцу r/l: ");
        fflush(stdin);
        c=getchar();
    } while (c!='l' && c!='r');
    while(s->r!=s)
    {
        while(n-1)                                              
        {
            s=direction(s, c);
            n--;    
        }
        s->l->r=s->r;                                           
        s->r->l=s->l;                                           
        s1=s->r;                                                
        free(s);                                                
        s=s1;
        n=step;
    }
    return s;
}
 
RING *direction(RING *s, char c)
{
    switch(c)                                               
    {
    case 'l': return s=s->l;
    case 'r': return s=s->r;
    }
}
Что означают эти операции:

C
1
2
3
4
5
s->l->r=s->r;                                           
s->r->l=s->l;                                          
s1=s->r;                                                 
free(s);                                            
s=s1;
понятно, что они удалают, но можно конкретнее, что именно происходит с указателями и как это все работает?

Буду очень благодарен, не могу въехать никак.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2013, 19:51
Ответы с готовыми решениями:

Нужны задачки для упражнения в работе со списком, стеком, очередью и двусвязным списком
Недавно научился строить список, стек, очередь, двусвязный список в С++, что бы закрепить навыки мне нужны задачки. Можете подсказать, где...

Объясните, пожалуйста, действия программы
#include <stdio.h> #include<string> #include<map> #include <stdlib.h> #include<iostream> using namespace std; struct Spisok{ ...

Работа с двусвязным списком
Программа работает, но частично (косяк с вводом строк и не работает определение принадлежности элемента списка). Исправьте, пожалуйста!=( ...

1
4 / 4 / 3
Регистрация: 30.09.2012
Сообщений: 63
29.03.2013, 00:56  [ТС]
Все, я все понял, тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2013, 00:56
Помогаю со студенческими работами здесь

Программа с двусвязным списком крашится
Здравствуйте! написал код для двусвязного списка, проблема следующая: все компилируется, запускается интерфейс, но какую бы функцию я...

Элементарные операции с динамических двусвязным списком
Всем доброго времени суток! Нужна ваша помощь! В общем задание: Сформировать динамический двусвязный список. Структура содержит...

Задача с двусвязным списком. Правильно ли решена?
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef struct node { int data; struct node *next; struct node...

Разработать программу работы с двусвязным списком
Разработать программу работы с двусвязным списком. Програма длжна реализовать сл. процедуры, вызываемые из меню: -построение списка...

Создать класс, позволяющий работать с двусвязным списком
Подскажите пожалуйста что-нибудь ) Создать класс, позволяющий работать с двусвязным списком. Реализовать в классе методы: -...


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

Или воспользуйтесь поиском по форуму:
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
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru