Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 37

Реализация связного списка

11.06.2013, 17:00. Показов 2857. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить задачу
Написать программу, реализующую связный список с информацией о сотрудниках и отображающую список в порядке возрастания возраста сотрудника
Нужно написать программу без использования библиотеки list

я вот начал, только функция добавления не правильная

Помогите решить задачу

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
#include <stdio.h>
#include <iostream>
#include <windows.h>
 
typedef struct rabota {
char name[100];
char surname[100];
int year;
} RAB;
typedef struct svyaz {
RAB lib;
RAB* prev, *next;
} OBJ;
OBJ* head = NULL;
OBJ* tail = NULL;
 
OBJ* add_obj(char* name, char* surname, int year)
{
OBJ* current = (OBJ *)malloc(sizeof(OBJ));
strcpy(current->rab.name, name);
strcpy(current->rab.surname, surname);
current->rab.year = year;
current->prev = tail;
current->next = NULL;
if(tail != NULL)
tail->next = current;
if(head == NULL) head = current;
tail = current;
return current;
}
 
int zadacha()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
OBJ *current = NULL;
int year;
char name[100], surname[100];
int n;
printf("Введите количество сотрудников: ");
scanf("%s",n);
for(int i=0;n>i;i++)
{
printf("Введите фамилию сотрудника: ");
scanf("%s",name);
printf("Введите имя сотрудника: ");
scanf("%s",surname);
printf("Введите его возраст: ");
scanf("%d",&year);
current = add_obj(name, surname, year);
}
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2013, 17:00
Ответы с готовыми решениями:

Реализация связного списка
надо решить задачу: Сведения о владельце автомобиля: фамилия, марка автомобиля (строки), номер автомобиля (целое число). По сведениям в...

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

Создание двойного связного списка целых чисел, вводимых с клавиатуры; печать списка
Люди помогите, нужно сдать последнюю Лабу. Задача: Написать программу которая создает двойной связный список целых цисел, вводимых с...

8
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
11.06.2013, 19:49
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
#include <iostream>
#include <string>
 
struct TEmployee
{
   std::string surname;
   std::string name;
   unsigned year;
};
 
struct TNode
{
   TEmployee employee;
   TNode* next;
};
 
//-----------------------------------------------------------------------------
TNode* Push(TNode*& list, const TEmployee& employee)
{
   TNode* node = new TNode;
   node->employee = employee;
 
   if ((list == NULL) || (employee.year < list->employee.year))
   {
      node->next = list;
      list = node;
   }
   else
   {
      TNode* cur = list;
 
      while (cur->next && (cur->employee.year < employee.year))
      {
         cur = cur->next;
      }
 
      node->next = cur->next;
      cur->next = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Clear(TNode*& list)
{
   TNode* node;
   while (list)
   {
      node = list;
      list = list->next;
      delete node;
   }
}
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& is, TEmployee& employee)
{
   std::cout << "Фамилия: ";
   is >> employee.surname;
 
   std::cout << "Имя:     ";
   is >> employee.name;
 
   std::cout << "Возраст: ";
   is >> employee.year;
 
   std::cout << std::endl;
 
   return is;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TEmployee& employee)
{
   return os << "Фамилия: " << employee.surname << std::endl
             << "Имя:     " << employee.name << std::endl
             << "Возраст: " << employee.year << std::endl;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TNode* list)
{
   while (list)
   {
      os << list->employee << std::endl;
      list = list->next;
   }
 
   return os;
}
//-----------------------------------------------------------------------------
 
int main()
{
   unsigned n;
   std::cout << "Введите количество сотрудников: ";
   std::cin >> n;
 
   TEmployee employee;
   TNode* list = NULL;
 
   while (n--)
   {
      std::cin >> employee;
      Push(list, employee);
   }
 
   std::cout << "Список:" << std::endl << list;
 
   Clear(list);
 
   return 0;
}
2
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 37
12.06.2013, 06:15  [ТС]
спасибо большое
0
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 37
13.06.2013, 07:32  [ТС]
Цитата Сообщение от anmartex Посмотреть сообщение
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
#include <iostream>
#include <string>
 
struct TEmployee
{
   std::string surname;
   std::string name;
   unsigned year;
};
 
struct TNode
{
   TEmployee employee;
   TNode* next;
};
 
//-----------------------------------------------------------------------------
TNode* Push(TNode*& list, const TEmployee& employee)
{
   TNode* node = new TNode;
   node->employee = employee;
 
   if ((list == NULL) || (employee.year < list->employee.year))
   {
      node->next = list;
      list = node;
   }
   else
   {
      TNode* cur = list;
 
      while (cur->next && (cur->employee.year < employee.year))
      {
         cur = cur->next;
      }
 
      node->next = cur->next;
      cur->next = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Clear(TNode*& list)
{
   TNode* node;
   while (list)
   {
      node = list;
      list = list->next;
      delete node;
   }
}
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& is, TEmployee& employee)
{
   std::cout << "Фамилия: ";
   is >> employee.surname;
 
   std::cout << "Имя:     ";
   is >> employee.name;
 
   std::cout << "Возраст: ";
   is >> employee.year;
 
   std::cout << std::endl;
 
   return is;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TEmployee& employee)
{
   return os << "Фамилия: " << employee.surname << std::endl
             << "Имя:     " << employee.name << std::endl
             << "Возраст: " << employee.year << std::endl;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TNode* list)
{
   while (list)
   {
      os << list->employee << std::endl;
      list = list->next;
   }
 
   return os;
}
//-----------------------------------------------------------------------------
 
int main()
{
   unsigned n;
   std::cout << "Введите количество сотрудников: ";
   std::cin >> n;
 
   TEmployee employee;
   TNode* list = NULL;
 
   while (n--)
   {
      std::cin >> employee;
      Push(list, employee);
   }
 
   std::cout << "Список:" << std::endl << list;
 
   Clear(list);
 
   return 0;
}
Можно еще одну просьбу, пояснить как работает функция добавления
я запутался что какой указатель значит
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
13.06.2013, 09:09
Цитата Сообщение от masikus Посмотреть сообщение
Можно еще одну просьбу, пояснить как работает функция добавления
я запутался что какой указатель значит
Да их там всего-то 3: сам list, node и cur. Ну да ладно:

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
//-----------------------------------------------------------------------------
// Функций добавляет в список работника.
// Она добавляет элемент таким образом, чтобы не нарушить
// возрастающую возрастную последовательность 
TNode* Push(TNode*& list, const TEmployee& employee)
{
   // Новый узел, который собственно и будет
   // добавляться в список
   TNode* node = new TNode;
   node->employee = employee;
 
   // В случае если список абсолютно пуст или самый первый в списке
   // работник уже старше нового, то добавляем новый узел в вершину
   // нашего списка
   if ((list == NULL) || (employee.year < list->employee.year))
   {
      node->next = list;
      list = node;
   }
   else
   {
      // Курсор, вспомогательный указатель на узел
      TNode* cur = list;
 
      // Пробегаемся по списку и ищем работника который старше добавляемого,
      // ну или пока весь список не закончился
      while (cur->next && (cur->next->employee.year < employee.year))
      {
         cur = cur->next;
      }
 
      // А теперь просто вставляем в найденное для него место
      node->next = cur->next;
      cur->next = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
Кстати, посмотрите на строку 27, я там исправил ошибку из предыдущего поста. Заменил cur->employee.year на cur->next->employee.year
1
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 37
13.06.2013, 10:04  [ТС]
спасибо
можете еще помочь написать функцию, если не сложно
Вставки элемента связного списка в указанную пользователем позицию. Предусмотреть ситуацию, когда указанная пользователем позиция превышает максимальное количество существующих на данный момент элементов списка. В этом случае должно быть создано необходимое количество пустых элементов списка для дополнения до необходимого размера.
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
13.06.2013, 10:46
Вообще-то в таких случаях нужно новую тему создавать.
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
#include <iostream>
 
struct TNode
{
   int value;
   TNode* next;
 
   TNode(int theValue = 0): value(theValue), next(NULL) { ; }
};
 
//-----------------------------------------------------------------------------
TNode* Insert(TNode*& list, int value, size_t pos = 0)
{
   TNode* node = new TNode(value);
 
   if ((list == NULL) || (pos == 0))
   {
      node->next = list;
      list = node;
   }
   else
   {
      TNode* cur = list;
      size_t idx = 1;
 
      while ((idx++ < pos) && (cur->next))
      {
         cur = cur->next;
      }
 
      TNode* empty;
      while (idx < pos)
      {
         empty = new TNode;
         cur->next = empty;
         cur = empty;
         idx++;
      }
 
      node->next = cur->next;
      cur->next = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
std::ostream& operator << (std::ostream& os, const TNode* list)
{
   while (list)
   {
      os << list->value << ", ";
      list = list->next;
   }
   os << "\b\b \b";
 
   return os;
}
//-----------------------------------------------------------------------------
 
int main()
{
   TNode* list = NULL;
 
   Insert(list, 1, 0);
   Insert(list, 2, 1);
   Insert(list, 3, 4);
   Insert(list, 4, 10);
   Insert(list, 5, 20);
   Insert(list, -1);
 
   std::cout << list << std::endl;
 
   return 0;
}
1
2 / 2 / 0
Регистрация: 03.03.2013
Сообщений: 37
13.06.2013, 10:55  [ТС]
спасибо
буду разбираться щас
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.06.2013, 12:00
сделать пустым
пуст/не пуст
установить указатель в начало
указатель в конце/не в конце
передвинуть указатель вперёд
добавить элемент за указателем
взять элемент за указателем
прочитать/записать элемент за указателем
удалить элемент за указателем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2013, 12:00
Помогаю со студенческими работами здесь

Создание связного списка
нужно создать связной список, что собственно уже сделал. что нужно: -функции: -root (выводит список) -push (+1 елемент в...

Удаление из связного списка
Вечер Добрый! Проблема с функцией удаления. Нужны советы, подсказки от гуру) Проблемная точка в части удаления не из начала списка(из...

Сортировка связного списка
Привет всем! как правильно написать сортировку для связного циклического списка ? помогите пожалуйста... #include &lt;iostream&gt; ...

Сортировка связного списка
Привет всем! пришлите пожалуйста код реализации сортировки односвязного списка (желательно с комментарием)! а то у меня совсем ничего...

Возвращение элемента связного списка
Здравствуйте. Есть связный список где в качестве элемента принимается структура DATA. Проблема возникает в методе get(int position),...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru