Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82

Двусвязный список

23.09.2013, 00:46. Показов 1803. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Задание такое:
Разработать и отладить программу. Предусмотреть:
- ввод данных из файла
- вывод результатов на экран в виде таблицы
Список школ имеет следующую структуру: номер школы – район - количество учеников начальных классов - количество учеников среднего звена – количество старшеклассников - общее количество учеников. При вводе рассчитайте общее количество учеников и выведите информацию о школах в виде таблицы.
1) Вывести номера школ и район, в которых учеников начальных классов минимально (таких может быть несколько).
2) Вывести всю информацию о школах заданного района (название района ввести с клавиатуры).
3) Выполнить сортировку списка по общему количеству учеников, вывести отсортированный список
_______
Пока есть только наброски. Класс и иже с ним:

Кликните здесь для просмотра всего текста
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
#include <vcl.h>
 
typedef unsigned short int USI;
 
struct School
{
  USI number,primary,middle,senior;
  char district[20];
 
  struct School *next;
  struct School *prev;
} info;
 
class List
{
public:
    School *pHead; 
    School *pTail;
    int countElem; 
 
    List();  
    ~List();
 
    void addToList(USI number,USI primary,USI middle,USI senior,char district[20]);
    void printList();       
    void delAllList();     
    void delElem(int numb); 
};
 
List::List()
{
    pHead=NULL;
    pTail=NULL;
    countElem=0;
};
 
List::~List()
{
    delAllList();
};
 
void List::addToList(USI number,USI primary,USI middle,USI senior,char district[20])    
{
    School *temp=new School; 
    if(pHead==NULL)          
    {
        temp->prev=NULL; 
        temp->next=NULL; 
        pHead=temp;      
    }
    else 
        pTail->next=temp; 
 
    temp->number=number; 
    temp->primary=primary;
    temp->middle=middle;
    temp->senior=senior;
    temp->district[20]=district[20];
    temp->next=NULL;  
    temp->prev=pTail; 
    pTail=temp;      
    countElem++;     
};
 
void List::delAllList() 
{
    while(pHead!=NULL) 
    {
        School *pTemp=pHead; 
        pHead=pHead->next;  
        delete pTemp;        
    }
 
    pHead=NULL;
    pTail=NULL;
    countElem=0;
};
 
void List::delElem(int numb) 
{
    School *pTemp=pHead; 
 
    if((numb>countElem)||(numb<1)) 
        ShowMessage("There is no such element in the list!"); 
    else
    {
        for(int i=1; i!=numb; i++) 
            pTemp=pTemp->next;
 
        if(pTemp->prev==NULL) 
        {
            if(countElem==1) 
            {
                pHead=NULL;
                pTail=NULL;
            }
            else 
            {
                pTemp->next->prev=NULL;
                pHead=pTemp->next;
            }
 
            delete pTemp;
            countElem--;
            ShowMessage("Element was deleted from the list");
            return;
        }
 
        if(pTemp->next==NULL) 
        {
            pTemp->prev->next=NULL; 
            pTail=pTemp->prev;    
 
            delete pTemp;
            countElem--;
            ShowMessage("Element was deleted from the list");
            return;
        }       
 
        if(pTemp->next!=NULL&&pTemp->prev!=NULL) 
        {
            pTemp->prev->next=pTemp->next; 
            pTemp->next->prev=pTemp->prev; 
            delete pTemp;
            countElem--;
            ShowMessage("Element was deleted from the list");
            return;
        }
    }
};


Сочинила форму и начала её оживлять:

Кликните здесь для просмотра всего текста
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
List(NewList);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    Close();    
}
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    NewList.addToList(Edit1->Text.ToInt(),Edit3->Text.ToInt(),Edit4->Text.ToInt(),Edit5->Text.ToInt(),Edit2->Text.c_str());
    int currentCol=NewList.countElem;
    StringGrid1->ColCount=NewList.countElem+1;
 
    StringGrid1->Cells[currentCol][0]=Edit1->Text.ToInt();
    StringGrid1->Cells[currentCol][1]=Edit2->Text.c_str();
    StringGrid1->Cells[currentCol][2]=Edit3->Text.ToInt();
    StringGrid1->Cells[currentCol][3]=Edit4->Text.ToInt();
    StringGrid1->Cells[currentCol][4]=Edit5->Text.ToInt();
    StringGrid1->Cells[currentCol][5]=Edit1->Text.ToInt();
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    StringGrid1->ColCount=NewList.countElem+2;
    StringGrid1->Cells[0][0]=" Школа №->";
    StringGrid1->Cells[0][1]=" Район";
    StringGrid1->Cells[0][2]=" НачШкола";
    StringGrid1->Cells[0][3]=" СрЗвено";
    StringGrid1->Cells[0][4]=" СтарШкола";
    StringGrid1->Cells[0][5]=" Всего";
}
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    NewList.delAllList();
    StringGrid1->ColCount=NewList.countElem+2;
}


Компилируется пока нормально. Но при попытке протестировать кнопку "Добавить в список" вылазит окошко (прилагается). Что может быть не так?

Ввод из файла и собственно задания пока реализовывать и не пыталась. Понимаю, что в коде очень много недочётов, поэтому прошу совета относительно решения. Буду благодарна за любую конструктивную критику и рацпредложения.
Миниатюры
Двусвязный список   Двусвязный список  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2013, 00:46
Ответы с готовыми решениями:

Двусвязный список. сортировка пузырьком.
Помогите пожалуйста переделать код из delphi в с++. вот код type //Типы для описания списка. //Тип данных - определяет...

Двусвязный список: создание, добавление элементов в конец списка, поиск по значению информационного поля макси
Народ помогите пж. 14) Двусвязный список: создание, добавление элементов в конец списка, поиск по значению информационного поля...

Переделать двусвязный список в двусвязный кольцевой
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

11
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
23.09.2013, 07:00
Locust, ругается он на то, что значение "" не является целым. Скорей всего, какое-нибудь поле, где должно быть число оставляешь пустым и программа выдаёт ошибку. Или заполняешь не теми данными. По хорошему необходимо делать проверку того, что вводишь в текстовых полях или устанавливать в свойствах стиль, который будет ограничивать ввод (например только цифры).
2
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82
24.09.2013, 23:03  [ТС]
Снова я. С новыми вопросами.

Начала думать над первым заданием, написала пока вот что:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
School *pTemp=NewList.pHead;
    int primaryMin;
    char districtMin[20];
 
    for(int i=1; i!=NewList.countElem; i++)
    {
        primaryMin=pTemp->primary;
        districtMin[20]=pTemp->district[20];
        if(pTemp->next->primary<primaryMin)
            {
                primaryMin=pTemp->next->primary;
                districtMin[20]=pTemp->next->district[20];
            }
 
        pTemp=pTemp->next;
    }
Вроде как поиск минимума среди учеников начальных классов и соответствующего района, пока без вывода. При попытке протестировать дебаггер жалуется на строчку, которая тут под номером 9. Наверное, выход за пределы списка из-за next, но исправить самой не получается.
0
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
25.09.2013, 12:39
Locust, во-первых, такое условие выхода из цикла
C++
1
i!=NewList.countElem;
не очень корректно. Правильнее писать
C++
1
i<=NewList.countElem;
потому что если вдруг у тебя i по какой-нибудь случайности станет больше, чем NewList.countElem, то в первом случае цикл продолжится, так как больше - это не равно, а во втором цикл завершится. Во-вторых, можно вообще отказаться от цикла for и использовать вместо него цикл while, в котором проверять условие (pTemp->next!=NULL).

Добавлено через 5 часов 33 минуты
Кроме того. В классе списка необходимо все переменные описать в секции private и обращаться к ним из программы через соответствующие методы. Поясню. countElem объявлена в секции public. Соответственно в программе можно написать, например,
C++
1
NewList.countElem=1000;
и программа будет работать уже неправильно. Если у тебя реально будет, скажем, всего 5 элементов, то цикл for гарантированно выходит за границы списка. То же самое можно сказать и про указатели pHead, pTail. Если написать такую строку
C++
1
NewList.pHead=NULL;
то список лишится первого элемента, хотя, я думаю к нему ещё можно будет обратится из второго, в котором останется адрес первого элемента в prev, но даже до него придётся добираться с хвоста, так как pHead=NULL и не указывает больше на первый элемент списка.
Если всё же нужно получать их значения, то необходимо создать функции, которые будут возвращать нужные значения. Например для количества элементов списка:
C++
1
2
3
int List::GetCountElem(){
    return countElem;
}
Также надо поступать и с указателями на начало и конец списка - GetHead, GetTail (или GetFirst, GetLast).
1
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82
29.09.2013, 22:59  [ТС]
Хочу, чтобы во втором задании данные о каждой новой школе района, указанного в Edit, добавлялись в message.
Последний элемент списка не воспринимает. Где я накосячила?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString message;
    School *pTemp=NewList.pHead;
    message="Район ";
    if(NewList.countElem>1)
    {
        do
        {
            if(pTemp->district.data()==Edit7->Text)
            {
                message += pTemp->district.data();
                message+="\nШкола №"+IntToStr(pTemp->number);
                message+="\nВ начальных классах - "+IntToStr(pTemp->primary)+" человек";
                message+="\nСреднее звено - "+IntToStr(pTemp->middle)+" человек";
                message+="\nСтаршеклассники - "+IntToStr(pTemp->senior)+" человек";
            }
            pTemp=pTemp->next;
        }
        while(pTemp->next!=NULL);
    }
 
    ShowMessage(message);
    Edit7->Clear();
Добавлено через 5 часов 13 минут
Попробовала написать ещё что-то типа сортировки списка пузырём к третьему заданию. Для вывода отсортированного списка StringGrid должен очищаться, а потом туда загоняются данные из обновлённого списка.
Во-первых, очень медленно. Три элемента "отсортировал" секунд за пять (может, из-за того, что машина слабая), на четырёх уже подвис. Ну, раз пузырьком, то так, по идее, и должно быть, но скорее всего, это я где-то напортачила. Как быстрее всего список можно отсортировать?

Во-вторых, вернусь к трём "типа отсортированным" элементам: наименьший элемент, который изначально был в начале, просто продублировался в конце, заменив средний по размеру элемент, стоявший там изначально. Ошибка в самой сортировке или в выводе?

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
School *pTemp=NewList.pHead;
    bool isDone=false;
 
    while(pTemp->next)
    {
        while(!isDone)
        {
            isDone=true;
            if((pTemp->primary+pTemp->middle+pTemp->senior)>(pTemp->next->primary+pTemp->next->middle+pTemp->next->senior))
            {
                isDone=false;
                School *temp=new School;
                temp=pTemp;
                pTemp=pTemp->next;
                pTemp->next=temp;
                delete temp;
            }
        }
        pTemp=pTemp->next;
    }
 
    StringGrid1->ColCount=NewList.countElem+2;
    StringGrid1->Cols[1]->Clear();
 
    int currentCol=1;
    StringGrid1->ColCount=NewList.countElem+1;
    {
        StringGrid1->Cells[currentCol][0]=pTemp->number;
        StringGrid1->Cells[currentCol][1]=pTemp->district.data();
        StringGrid1->Cells[currentCol][2]=pTemp->primary;
        StringGrid1->Cells[currentCol][3]=pTemp->middle;
        StringGrid1->Cells[currentCol][4]=pTemp->senior;
        StringGrid1->Cells[currentCol][5]=pTemp->primary+pTemp->middle+pTemp->senior;
 
        currentCol++;
    }
    while(pTemp->next!=NULL);
0
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
01.10.2013, 07:15
Попробуй вместо этого
C++
1
while(pTemp->next!=NULL);
написать
C++
1
while(pTemp!=NULL);
В этом случае я думаю у тебя отработается и последний элемент.
По сортировке. Что-то не похоже у тебя это на пузырьковую сортировку. В пузырьковой сортировке должно быть два вложенных друг в друга цикла. Вот посмотри алгоритмы сортировок. У тебя просто не должно упорядочится по этому алгоритму, потому что ты делаешь всего один проход.
Для увеличения быстродействия попробуй инициализировать temp только один раз перед циклами, то есть поставь
C++
1
School *temp=new School;
перед
C++
1
while(pTemp->next)
соответственно удаление будешь делать уже после цикла
Тогда у тебя эти операции выполняться всего один раз. И, кстати, когда реализуешь правильный алгоритм пузырьковой сортировки - надобность в IsDone, я думаю также отпадёт.
0
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82
02.10.2013, 22:18  [ТС]
Цитата Сообщение от lipnev Посмотреть сообщение
В этом случае я думаю у тебя отработается и последний элемент.
- поистине так. Большое спасибо, сама бы по невнимательности и не заметила.
__________
Попробовала переделать по мотивам алгоритма.
Что опять не так (виснет всё ещё)?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
School *pTemp=NewList.pHead;
 
    School *temp=new School;
    while(pTemp->next)
    {
        while(pTemp->next)
        {
            if((pTemp->primary+pTemp->middle+pTemp->senior)>(pTemp->next->primary+pTemp->next->middle+pTemp->next->senior))
            {
                temp=pTemp;
                pTemp=pTemp->next;
                pTemp->next=temp;
                delete temp;
            }
            pTemp=pTemp->next;
        }
        pTemp=pTemp->next;
    }
Пожалуйста, делайте скидки на моё дилетантство.
0
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
02.10.2013, 23:10
Locust, опять невнимательность или дилетантство. Но главное, что ты пытаешься что-то делать. Смотри ты перед циклом ОДИН раз выделяешь память под temp,
C++
1
School *temp=new School;
а в цикле постоянно эту память освобождаешь
C++
1
2
3
4
5
if((pTemp->primary+pTemp->middle+pTemp->senior)>(pTemp->next->primary+pTemp->next->middle+pTemp->next->senior))
            {
                //После перестановок память выделенная под temp освобождается
                delete temp;
            }
То есть, после второй перестановки получается уже нечего освобождать. Странно, что программа виснет, а не вылетает с ошибкой.

Добавлено через 28 минут
Тут надо выбирать. Либо ты и new и delete пишешь внутри условия if, либо вне границ главного цикла. То есть new перед циклом (как ты написала), а delete после цикла. Самое главное, чтоб количество выделений и освобождений памяти совпадало. Если выделила один раз перед циклом, то и освобождаешь один раз после цикла. Если выделяешь каждый раз при перестановке, то и освобождаешь каждый раз после перестановке. То есть в твоём случае это будет так:
C++
1
2
3
4
5
 pTemp=pTemp->next;
        }
        pTemp=pTemp->next;
    }
delete temp;
0
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82
02.10.2013, 23:27  [ТС]
Спасибо за совет. Исправила. Хе, результата нуль.

Вот вся обработка нажатия на кнопку с выполнением задания. Может, где ещё налажала:

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
School *pTemp=NewList.pHead;
 
    School *temp=new School;
    while(pTemp->next)
    {
        while(pTemp->next)
        {
            if((pTemp->primary+pTemp->middle+pTemp->senior)>(pTemp->next->primary+pTemp->next->middle+pTemp->next->senior))
            {
                temp=pTemp;
                pTemp=pTemp->next;
                pTemp->next=temp;
            }
            pTemp=pTemp->next;
        }
        pTemp=pTemp->next;
    }
    delete temp;
 
    StringGrid1->ColCount=NewList.countElem+2;
    StringGrid1->Cols[1]->Clear();
 
    int currentCol=1;
    StringGrid1->ColCount=NewList.countElem+1;
    {
        StringGrid1->Cells[currentCol][0]=pTemp->number;
        StringGrid1->Cells[currentCol][1]=pTemp->district.data();
        StringGrid1->Cells[currentCol][2]=pTemp->primary;
        StringGrid1->Cells[currentCol][3]=pTemp->middle;
        StringGrid1->Cells[currentCol][4]=pTemp->senior;
        StringGrid1->Cells[currentCol][5]=pTemp->primary+pTemp->middle+pTemp->senior;
 
        currentCol++;
    }
    while(pTemp->next!=NULL);

Не по теме:

Спасибо, что нянчитесь с такими ламерами, как я. Это какое терпение иметь надо...

0
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
05.10.2013, 22:09
Locust, видимо ты не совсем поняла алгоритм пузырьковой сортировки. Если на пальцах, то алгоритм такой. Ты сравниваешь, два соседних элемента, и если условие сравнения выполняется, то меняешь элементы местами. Так ты проходишь от первого элемента до последнего. Это будет один проход. За него отвечает внутренний цикл. Следующий проход будет начинаться уже со второго элемента, третий с третьего и т. д. За количество проходов отвечает внешний цикл. Чтоб реализовать этот алгоритм необходимо, чтоб в циклах изменялись разные переменные. То есть допустим, в главном цикле у тебя изменяется pTemp, а во внутреннем pTemp2.
Теперь смотри что получается у тебя. Оба цикла идут по одной переменной. Начинается всё верно. Сравнивается первый элемент со вторым. Первый проход идёт весь правильно. Но затем начинаются проблемы. После первого прохода у нас идёт строка 16
C++
1
pTemp=pTemp->next;
Получается, что pTemp у тебя становится NULL. Что творится у тебя дальше я не знаю. Либо у тебя всё заканчивается на первом проходе. Либо программа надолго зависает, пока не выполнится условие внешнего цикла.
C++
1
while(pTemp->next)
А когда это произойдёт - неизвестно. Скорей всего у тебя идёт по второму варианту.

Добавлено через 31 минуту
Хотя нет. Скорей всего у тебя программа вылетает с ошибкой, потому что указатель становится NULL. А у такого элемента нет внутри ни next, ни primary, ни middle, ни senior - вообще нет никаких переменных. То есть при попытке обратится к одному из них должна вылететь ошибка.
1
1 / 1 / 1
Регистрация: 09.11.2012
Сообщений: 82
05.10.2013, 22:17  [ТС]
Ну, к примеру, добавила я второй pTemp.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
School *pTemp=NewList.pHead;
    School *pTemp2=NewList.pHead;
 
    School *temp=new School;
    while (pTemp->next)
    {
        while (pTemp2->next)
        {
            if((pTemp->primary+pTemp->middle+pTemp->senior)>(pTemp->next->primary+pTemp->next->middle+pTemp->next->senior))
            {
                temp=pTemp;
                pTemp=pTemp->next;
                pTemp->next=temp;
            }
        pTemp2=pTemp2->next;
        }
    pTemp=pTemp->next;
    }
    delete temp;
Для проверки ввожу данные о трёх школах. Если, допустим, в первой общее число учеников равно шести, во второй - девяти, а в третьей - трём, то ничего не виснет. А если в первой - девять, во второй - три, а в третьей - шесть, то всё снова здорово.
_______
С NULL сейчас разбираться буду. Это же вроде не do while, будет же цикл прерываться, по идее, если условие не выполняется, и до primary и иже с ним доходить вообще не должно. По крайней мере, рассуждать пыталась я так.
0
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
06.10.2013, 00:15
Locust, я немного неправильно описал алгоритм пузырьковой сортировки. Каждый новый проход должен всегда начинаться с первого элемента, а не переходить на второй, третий и т. д. То есть количество проходов должно быть равно (количество элементов минус 1). И каждый проход должен идти с начального элемента до предпоследнего.
Теперь смотри что получается. Ты ввела вторую переменную в цикл, НО всё осталось по прежнему у тебя алгоритм в целом не изменился. И осталась та же самая ошибка.
Во-первых всё-таки советую посмотреть алгоритм пузырьковой сортировки. Ты просто его не поняла, поэтому ты и не видишь ошибки в нём. И во-вторых, научись пользоваться дебаггером. Очень помогает. Запускаешь программу по шагам и смотришь значения переменных в нужный момент.
Теперь ещё ошибки. Внешний цикл - это количество проходов. То есть в этом цикле даже не обязательно перемещаться по элементам (можно даже цикл for использовать при желании). Это не столько ошибка, сколько замечание.
А вот теперь действительно ошибки. Во внутреннем цикле у тебя изменяется pTemp2, соответственно и в сравнении должна быть эта переменная. И при обмене элементов тоже pTemp2. Это раз. Вторая ошибка. Каждый проход должен начинаться с первого элемента. Что это значит? Это значит, что перед началом каждого прохода pTemp2 должен устанавливаться на начальный элемент. Думаю, если ты исправишь эти два момента, то сортироваться у тебя всё будет правильно. Но всё же посмотри на алгоритмы сортировок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2013, 00:15
Помогаю со студенческими работами здесь

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Двусвязный список (в конец двусвязного списка добавить другой список)
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

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

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на двусвязный список using namespace std; class person { ...

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru