0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 16
1

Двунаправленный список. Удаление элементов с одинаковыми соседями

19.05.2015, 23:52. Показов 934. Ответов 1
Метки нет (Все метки)

Собственно вот такое задание нужно выполнить.
Нашел код, который вроде бы работает, но не во всех случаях. Прошу знатоков глянуть что к чему и исправить ошибки.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
struct characters {
    char data;
    characters* next;
    characters* prev;
};
 
characters* readList();
characters* deleteChars(characters* head);
void writeList(characters* ch);
 
int main()
{
    characters* qList;
 
    qList = readList();
    writeList(deleteChars(qList));
 
    _getch();
    return 0;
}
 
characters* readList()
{
    characters *ch, *head;
    char c;
 
    head = new characters;
 
    printf("\nInput sequence: ");
    scanf("%c", &c);
    head->data = c;
 
    ch = head;
 
    while (c != '.')
    {   
        ch->next = new characters;
        ch->next->prev = ch;
        ch->next->data = c;
        ch = ch->next;
        scanf("%c", &c);
    }
 
    ch->next = head;
    head->next->prev = ch;
 
    return head;
}
 
characters* deleteChars(characters* head)
{
     characters* ch = head->next;
     characters* tmp;
 
     do
     {
         if (ch->next->data == ch->prev->data) {
             tmp = ch->prev;
             ch->prev->next = tmp;
             ch->next->prev = ch->prev;
             delete ch;
             ch = tmp;
         }
         ch = ch->next;
     }
     while (ch != head);
 
     return head;
}
 
void writeList(characters* head)
{
    characters* ch;
    ch = head->next;
 
    while (ch != head)
    {
        printf("%c", ch->data);
        ch = ch->next;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2015, 23:52
Ответы с готовыми решениями:

Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением)
Здравствуйте! Помогите написать программу, обеспечивающую работу с двунаправленным нециклическим...

Сформировать двунаправленный список. Удалить из него Элементы, с одинаковыми ключевыми полями
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать...

Двунаправленный кольцевой список (удаление узлов)
Помогите с удалением узлов из списка(~List). Не знаю как правильно удалять #include &lt;iostream&gt; ...

Двунаправленный список (добавление/удаление/сортировка)
Задание: Необходимо создать двунаправленный список содержащий в себе информацию в виде &quot;Имя и номер...

1
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
20.05.2015, 07:23 2
1. new и delete из С++.
2. в С придется писать
C
1
struct characters* next;
3. В конце работы не мешало бы высвоболить память, занимаемую списком.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 07:23
Помогаю со студенческими работами здесь

Удалить элементы с одинаковыми соседями из двунаправленного циклического списка
удалить элементы с одинаковыми соседями. 1 и последний считать соседями. Здравствуйте, написала...

Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать...

Создать двунаправленный список из соответствующих (вещественных) элементов
Найти вещественное число по числу, введенному с клавиатуры и после него добавить новое число Прошу...

Двунаправленный список: вычислить произведение чётных элементов
Помогите пожалуйста с этим заданием: Ввести с клавиатуры двунаправленный список из целых чисел....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru