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

С++ Создать список фамилий, упорядочить его и предусмотреть вставку нового элемента в нужное место

08.04.2021, 14:46. Показов 1106. Ответов 3

Author24 — интернет-сервис помощи студентам
При написании кода возникли проблемы
В коде имеются две функции, одна, вставляет строку текста в нужное место, вторая выводит весь список полностью
Возникают проблемы при выводе списка( Помогите, пожалуйста

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#define max 10

using namespace std;

struct List
{
char d[max];
List* next;
};

void Print(List*);
void Insert1(List**, char&);

char x[max];
int main() {
List* u = NULL;
int k = 0;
cout << "Count of peole - ";
cin >> k;
for (int i = 0; i < k; i++) {
cout << "Fam " << i+1 << " - ";
scanf("%s", x);
Insert1(&u, x[max]);

}
Print(u);
}

void Print(List* u)
{
cout << "Spisok:" << endl;
while (u!=NULL)
{
printf("%10s\n", &u);
u = u->next;
}
}


void Insert1(List** u, char& x)
{// вставка в список одного элемента перед элементом, меньшим или равным данному x
List* p = new List;
p->d[max] = x;
if (*u == 0) // исходный список пуст - вставка в начало
{
p->next = 0;
*u = p;
return;
}
List* t = *u;
if (t->d[max] >= p->d[max]) // исходный список не пуст - вставка в начало
{
p->next = t;
*u = p;
return;
}
List* t1 = t->next;
while (t1)
{
if (t->d[max] < p->d[max] && p->d[max] <= t1->d[max])
{ // вставка в середину
t->next = p;
p->next = t1;
return;
}
t = t1;
t1 = t1->next;
}
t->next = p; // добавляем в конец списка
p->next = 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2021, 14:46
Ответы с готовыми решениями:

Создать двусвязный список из символов. Предусмотреть вставку после заданного элемента
В динамической памяти создать двусвязный список из символов. Предусмотреть вывод всех данных,...

Реализовать вставку в дерево бинарного поиска нового элемента и удаление его
Помогите, пожалуйста, решить задачку. Заранее, спасибо) Реализовать вставку в дерево бинарного...

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

Создать в динамической памяти односвязный список типа «очередь» из случайных символов, предусмотрев «буферный элемент». Организовать вставку элемента
Лабораторная работа №3 Вариант 16. 1. Создать в динамической памяти односвязный список типа...

3
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
08.04.2021, 20:59 2
Цитата Сообщение от pbabochkina Посмотреть сообщение
scanf("%s", x);
Insert1(&u, x[max]);
Цитата Сообщение от pbabochkina Посмотреть сообщение
if (t->d[max] < p->d[max] && p->d[max] <= t1->d[max])
Вы чего творите то... Ваши проблемы не при выводе, а при вводе списка. Это же сишные строки, они так не работают.
Все сравнения через strcmp(s1, s2)
И работать надо со строками, а не с символом на 1 дальше последнего (нарушение доступа к памяти).
1
0 / 0 / 0
Регистрация: 25.03.2021
Сообщений: 5
09.04.2021, 00:01  [ТС] 3
Bleach163, не могли ли бы вы помочь мне исправить код?

Добавлено через 15 минут
Цитата Сообщение от Bleach163 Посмотреть сообщение
Вы чего творите то... Ваши проблемы не при выводе, а при вводе списка. Это же сишные строки, они так не работают.
Все сравнения через strcmp(s1, s2)
И работать надо со строками, а не с символом на 1 дальше последнего (нарушение доступа к памяти).
С вводом я разобралась, теперь нужно наладить сортировку(((
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#define max 10

using namespace std;

struct List
{
char d[max];
List* next;
};

void Print(List*);
void Insert1(List**, char*);
char x[max];
int main() {
List* u = NULL;
int k = 0;
cout << "Count of peole - ";
cin >> k;
char trush = 1;
while (trush != '\n')
trush = getchar();
for (int i = 0; i < k; i++) {
cout << "Fam " << i + 1 << " - ";
scanf("%s", x);
Insert1(&u, x);
}
Print(u);
}

void Print(List* u)

{
List* p = new List;
p = u;
cout << "Spisok:" << endl;
while (p != NULL)
{
printf("%10s\n", p->d);
p = p->next;
}
}


void Insert1(List** u, char* x)
{// вставка в список одного элемента перед элементом, меньшим или равным данному x
List* p = new List;
strcpy(p->d, x);
if (*u == 0) // исходный список пуст - вставка в начало
{
p->next = 0;
*u = p;
return;
}

List* t = *u;
if (t->d[max] >= p->d[max]) // исходный список не пуст - вставка в начало
{
p->next = t;
*u = p;
return;
}
List* t1 = t->next;
while (t1)
{
if (t->d[max] < p->d[max] && p->d[max] <= t1->d[max])
{ // вставка в середину
t->next = p;
p->next = t1;
return;
}
t = t1;
t1 = t1->next;
}
t->next = p; // добавляем в конец списка
p->next = 0;
}
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
09.04.2021, 02:08 4
То, что при использовании std::string выглядит как str1 < str2, при использовании char* выглядит как strcmp(str1, str2) < 0.
У вас это почему-то стало str1[max] < str2[max]. И так во всех ваших проверках внутри сортировки.
А также оборачивайте код в соответствующие теги, это же не сложно, просто выделить код и нажать кнопку "С++". Зато сразу читаемость повышает...
0
09.04.2021, 02:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2021, 02:08
Помогаю со студенческими работами здесь

Как вставить в список a2 элемент b, в нужное место
Как вставить в список a2 элемент b, в нужное место, т.е должно быть , как условие записать?

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

Упорядочить по алфавиту список фамилий
Список фамилий, разделенных запятыми, записан в строке в произвольном порядке. Упорядочить его по...

Упорядочить список фамилий по алфавиту
Заданный список фамилий. Упорядочить их по алфавиту. Проверить написания первой большой буквы ...

Список фамилий упорядочить по алфавиту.
Список фамилий упорядочить по алфавиту. помогите решить задачу - очень надо!:) входные данные -...

Список фамилий. Упорядочить их по алфавиту
Заданный список фамилий. Упорядочить их по алфавиту. Проверить написания первой большой буквы ...


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

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

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