Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
mrprogt
0 / 0 / 1
Регистрация: 22.05.2017
Сообщений: 16
1

Удалить из списка элементы с повторяющимися более одного раза значениями (найти ошибку)

09.07.2017, 11:15. Просмотров 228. Ответов 2
Метки нет (Все метки)

Удалить из списка элементы с повторяющимися более одного раза значениями





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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctime>
        //структура
struct spisok
{
int value;                                               
struct spisok * next, *prev;                                    
};
 
struct spisok * dobavlenie(struct spisok *, spisok *, spisok *); 
void vyvodlist(struct spisok *, spisok *);
void zadanie(struct spisok *, spisok *, spisok *);
 
void main()
{
    setlocale(LC_CTYPE, "Rus");
    int menu=0, N1=0, N2=0;
    puts("Создание двунаправленного линейного списка (стека)");
    puts("Введите число элементов списка");
    scanf("%d", &N1);
    srand(time(NULL));
    spisok *begin1=0, *end1=0;
    struct spisok *t1 = new spisok;
    t1->value=rand();
    t1->prev=t1->next=NULL;
    begin1=end1=t1;
    for (int i = 0; i<N1-1; i++)
    {
        t1 = new spisok;
        t1->value = rand()%20;
        t1->next = NULL; 
        t1->prev=end1;
        end1->next=t1;
        end1=t1; 
    }
    _getch();
    
    m1:puts("Меню программы:");
    puts("1 –  Просмотр списка ");
    puts("2 –  Добавление элемента в список");
    puts("3 –  Выполнение индивидуального задания");
    puts("4 – Выход");
    puts("Введите цифру от 1 до 4");
    scanf("%d",&menu);
    if(menu==1){
        vyvodlist(t1, begin1); 
        goto m1;
    }
    else if(menu==2){
        dobavlenie(t1, end1, begin1);
        goto m1;
    }
    else if(menu==3){
        zadanie(t1, begin1, end1);
        goto m1;
    }
    else if(menu==4) exit(0);
    else {
    system("cls");
    puts("нажмите любую клавишу");
    _getch();
    }
 
}
 
void vyvodlist(struct spisok * t, spisok *begin)
{
t=begin;
int i = 1;  //Переменная, которая содержит номер обрабатываемой структуры (использ. при выводе для большей наглядности)
while (t) //Организуем цикл, кот выполняется пока list не станет равно NULL
{
printf("%2.d ADDR: %p VALUE: %d\tADDR_NEXT: %p\n", i, t, t->value, t->next, t->prev); //Вывод информации об элементе списка
t = t->next; //Получаем в list адрес элемента следующего за элементом, адрес которого на данной итерации хранится в list
i++; //увелич. счетчик структур
}
_getch();
}
 
struct spisok * dobavlenie (struct spisok * t, spisok * end, spisok * begin){
srand(time(NULL));
t=end;
t = new spisok;
t->value = rand()%20;
t->next = NULL; 
t->prev=end;
end->next=t;
end=t;
t=begin;
int i = 1;  //Переменная, которая содержит номер обрабатываемой структуры (использ. при выводе для большей наглядности)
while (t) //Организуем цикл, кот выполняется пока list не станет равно NULL
{
printf("%2.d ADDR: %p VALUE: %d\tADDR_NEXT: %p\tADDR_PREV: %p\n", i, t, t->value, t->next, t->prev); //Вывод информации об элементе списка
t = t->next; //Получаем в list адрес элемента следующего за элементом, адрес которого на данной итерации хранится в list
i++; //увелич. счетчик структур
}
_getch();
return(t);
}
 
 
void zadanie(struct spisok * t1,   spisok * end1, spisok * begin1,spisok * t2){
t1=begin1;
int element=0;
int i=1;
spisok *key1=NULL;
element=t1->value;
t1=end1;
while(t1){
    if(t1->value != element)
    {
        element=t1->value;
        //key1->next=t1->next;
        //key1->prev=t1->prev;
        key1=t1;
        t1=t1->next;
    }
    else 
    {t1=t1->next;
    i++;
    delete(t1);
    }
}
printf ("удален элемент: %d\n", element);
_getch();
t1=begin1;
 
    while(t1){
        t2=new spisok;
        t2->value=t1->value;
        t2->next=NULL;
        t1=t1->next;
        }
    
t2=begin1;
int i = 1;  //Переменная, которая содержит номер обрабатываемой структуры (использ. при выводе для большей наглядности)
while(t2) //Организуем цикл, кот выполняется пока list не станет равно NULL
{
printf("%2.d ADDR: %p VALUE: %d\tADDR_NEXT: %p\tADDR_PREV: %p\n", i, t2, t2->value, t2->next, t2->prev); //Вывод информации об элементе списка
t2 = t2->next; //Получаем в list адрес элемента следующего за элементом, адрес которого на данной итерации хранится в list
i++; //увелич. счетчик структур
}
_getch();
}
Добавлено через 38 секунд
не работает пункт 3
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2017, 11:15
Ответы с готовыми решениями:

В строках матрицы оставить элементы, которые встречаются более одного раза, остальные заменить нулем
Изменить таблицу a так чтобы в строках остались элементы которые встречаются более одного раза,...

Удалить из списка элементы с повторяющимися более одного раза значениями
Здравствуйте! Помогите пожалуйста! Есть задание: Удалить из списка элементы с повторяющимися ...

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

Удалить элементы, которые встречаются более одного раза
Вопрос состоит в следующем - мне нужно без цикла удалить абсолютно все повторяющиеся элементы....

Из массива удалить четные элементы, встречающиеся более одного раза
Из массива удалить четные элементы встречающиеся более одного раза. пример: массив a:9 3 4 9 1 0 0...

2
Keyboard-d
0 / 0 / 0
Регистрация: 09.07.2017
Сообщений: 1
09.07.2017, 12:38 2
А где у вас пункт 2 реализован? Я не вижу самого метода, если его нет, и программа не создаст список, то соответственно она и завалится на пункте 3, так как там происходит работа с этим списком
вероятно что пункт 2 тоже не работает, вы дебажили?
0
mrprogt
0 / 0 / 1
Регистрация: 22.05.2017
Сообщений: 16
09.07.2017, 20:30  [ТС] 3
создаю через рандом
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2017, 20:30

Из массива удалить элементы, встречающиеся в массиве более одного раза
Из массива удалить элементы, встречающиеся в массиве более одного раза. Пример: из массива A: 9 3...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int...

В матрице найти элементы, встречающиеся более одного раза
Если не трудно, помогите решить задачу.(Желательно с пояснениями). Заранее спасибо В матрице...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru