Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2018, 18:39   #1
Заяц90
Новичок
Джуниор
 
Регистрация: 16.11.2018
Сообщений: 2
По умолчанию Удаление повторяющихся элементов в двунаправленном списке

Всем привет! Ребята, помогите удалить повторяющийся элемент в двунаправленном списке. Код написан на с/с++.

/Двунаправленные списки Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для двунаправленного линейного списка. Создать список из случайных целых чисел. Удалить из списка элементы с повторяющимися более одного раза значениями./

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct list_element {
float value;
struct list_element * next, *prev;
};

void menu();
struct list_element * crt_list();
int view_list(struct list_element *);
struct list_element * add_el_to_list(struct list_element *);
float avg_list(struct list_element *);
struct list_element * chg_list(struct list_element *, int);

void main() {
int ch, n;
struct list_element * FIRST = NULL;

while (true) {
menu();
scanf_s("%d%*c", &ch);
switch (ch) {
case 0:
return;
case 1:
FIRST = crt_list();
break;
case 2:
n = view_list(FIRST);
break;
case 3:
FIRST = add_el_to_list(FIRST);
break;
case 4:
FIRST = chg_list(FIRST, n);
break;
default:
puts("Enter 1, 2, 3, 4 or 0");
break;
}
}
_getch();
}

void menu() {
puts("Menu: ");
puts("1. Create list.");
puts("2. View list.");
puts("3. Add item to list.");
puts("4. Remove repeat elements from list");
puts("0. Exit.");
}

struct list_element * crt_list() {
system("cls");
int n;

list_element *head = NULL, *tail = NULL, *current = NULL;

printf_s("Enter quantity elements of list : ");
scanf_s("%d%*c", &n);

for (int i = 0; i < n; i++) {
current = new list_element;
printf_s("Enter number : ");
scanf_s("%f%*c", &current->value);
current->prev = tail;
current->next = head;
if (head == NULL) {
head = tail = current;
}
else {
tail->next = current;
current->prev = tail;
tail = current;
}
}

puts("List is created.");
system("pause");
system("cls");
return current;
}

int view_list(struct list_element *list) {
system("cls");
puts("Start list : ");
int i = 1;
while (list) {
printf_s("%i = %.2f\n", i, list->value);
list = list->prev;
i++;
}

system("pause");
system("cls");
return --i;
}

struct list_element * add_el_to_list(struct list_element *list) {
system("cls");
int n;

printf_s("Enter quantity numbers to add to list : ");
scanf_s("%d%*c", &n);

list_element *head, *tail, *current;

for (int i = 0; i < n; i++) {
head = tail = current = list;
current = new list_element;
printf_s("Enter number : ");
scanf_s("%f%*c", &current->value);
current->prev =tail;
current->next = head;

tail->next = current;
current->prev = tail;
tail = current;
list = current;

}

puts("Numbers are added to list.");
system("pause");
system("cls");
return list;
}

struct list_element * chg_list(struct list_element *list, int n) {
float *mas;
mas = new float[n];
struct list_element * HEAD = NULL, *CURRENT = NULL, *TAIL = NULL, *list_1 = NULL;

list_1 = list;
int i = 1;
for (i; i < n; i++) {
int count = 0;

list->value;
int j = 1;
for (j;j < n; j++) {
if (list_1 == NULL) {
list_1 = list;
}
if (list->value == list_1->value) {
count++;
if (count == 1) {
for (int k = 0; k <= n; k++) {
if (list_1->value != *(mas + k)) {
list_1->value = list_1->value;
}
else
break;
if (k == n && list_1->value == list_1->value) {
CURRENT = new list_element;
CURRENT->value = list->value;
CURRENT->prev = TAIL;
CURRENT->next = HEAD;
if (HEAD == NULL) {
HEAD = TAIL = CURRENT;
}
else {
TAIL->next = CURRENT;
CURRENT->prev = TAIL;
TAIL = CURRENT;
}
break;
}
}

}
if (count > 1) {
*(mas + i) = list_1->value;//comment
break; //comment
}
}

list_1 = list_1->prev;
}

list =list->prev;
if (list->prev == NULL) {
list = list_1;
}
}
puts("Repeat dates is removed.");
system("pause");
return CURRENT;
}
Заяц90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление повторяющихся записей Luca Brasi SQL, базы данных 2 26.02.2016 09:51
Удаление элемента в двунаправленном списке из начала Grai Общие вопросы C/C++ 17 03.07.2015 16:03
Процедура удаления в двунаправленном списке mishammm Помощь студентам 1 04.05.2014 07:05
Удаление повторяющихся элементов двунаправленого связного списка (Си) lowercase Общие вопросы C/C++ 0 13.10.2012 12:09
Удаление повторяющихся записей gavrylyuk Microsoft Office Excel 3 28.06.2008 08:10