Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 407
#1

Написать программу, которая реализует круговой список - C++

05.05.2014, 09:28. Просмотров 285. Ответов 3
Метки нет (Все метки)

Добры
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 09:28     Написать программу, которая реализует круговой список
Посмотрите здесь:

Написать программу которая реализует алгоритмы массивов - C++
Использовать два одномерных массива - массив целых чисел и массив действительных чисел. Прочитать 15 действительных чисел и записать их в...

Написать программу, которая реализует телефонную книгу с функциями - C++
Написать программу, которая реализует телефонную книгу с функциями: добавления абонента -, редактирования абонента удаление абонента ...

Написать программу на языке С + + которая реализует конструктор который инициализирует исходные данные класса - C++
#include <vcl.h> #include <iostream.h> #include <conio.h> struct Phone { char prizviche; char imya; char...

написать программу которая реализует возможность управления запиписом, вывод, и удалением элементов в противнях - C++
Ребят, помогите пожалуйста. Написать программу которая реализует возможность управления запиписом, вывод, и удалением элементов в...

Написать программу, которая реализует функцию с неограниченным количеством параметров, организовывающую форматированный вывод на экран. - C++
Помогите решить задачу, запутался я с этими созданиями ф-ций, вот задача: Написать программу, которая реализует функцию с неограниченным...

Написать программу которая реализует шифр Цезаря, т.е. каждая буква заменяется на следущую за ней по алфавиту, а последняя буква заменяется первой - C++
Написать программу которая реализует шифр Цезаря, т.е. каждая буква заменяется на следущую за ней по алфавиту, а последняя буква заменяется...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13059 / 7322 / 817
Регистрация: 27.09.2012
Сообщений: 18,074
Записей в блоге: 3
Завершенные тесты: 1
05.05.2014, 09:35     Написать программу, которая реализует круговой список #2
Цитата Сообщение от avatar1870 Посмотреть сообщение
Добры
конечно добры
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 407
05.05.2014, 16:56  [ТС]     Написать программу, которая реализует круговой список #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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <iostream>
#include <iomanip>
#include <string>
 
using namespace std;
 
struct node
{
    node() : next(NULL) {}
    ~node();
    double middle();
    string name;
    string surname;
    unsigned short int kurs;
    short int *point;
    short int points_count;
    node *next;
};
 
node::~node()
{
    delete []point;
}
 
double node::middle()
{
    double summ = 0;
    for (int i = 0; i < points_count; i++) summ += point[i];
    return summ / points_count;
}
 
node *first = NULL;
node *last = NULL;
 
void recursive_remove(node *student)
{
    if (student->next != NULL) recursive_remove(student->next);
    delete student; 
}
 
int count_nodes()
{
    if (!first) return 0;
    int counter = 1;
    node *student = first;
    while (student->next != NULL)
    {
        counter++;
        student = student->next;
    }
    return counter;
}
 
void add_node()
{
    node *student = new node();
    cout << "Input name student:"; cin >> student->name;
    cout << "Input surname student:"; cin >> student->surname;
    cout << "Input kurs student:"; cin >> student->kurs;
    int pc;
    cout << "Input COUNT points for this student:"; cin >> pc;
    if (pc <= 0) pc = 2;
    student->points_count = pc;
    student->point = new short int[pc];
    for (int i = 0; i < student->points_count; i++)
    {
        cout << "|-Input " << (i+1) << " point:"; cin >> student->point[i];
    }
    if (first == NULL) first = last = student;
    else
    {
        last->next = student;
        last = student;
    }
}
 
node *item(int index)
{
    if (index < 0 || !first) return NULL;
    if (index == 0) return first;
    int max_count = count_nodes();
    if (index >= max_count) return NULL;
    node *student = first;
    for (int i = 1; i <= index; i++) student = student->next;
    return student;
}
 
void remove_node(int index = -1)
{
    if (index < -1 || !first) return;
    int max_count = count_nodes();
    if (index >= max_count) return;
    if (max_count == 1)
    {
        delete first;
        first = last = NULL;
    }
    else if (index == 0)
    {
        node *del = first;
        first = first->next;
        delete del;
    }
    else if (index == -1 || index == max_count-1)
    {
        node *temp = item(index-1);
        delete last;
        last = temp;
        last->next = NULL;
    }
    else
    {
        node *prev_student = item(index-1);
        node *next_student = item(index+1);
        delete item(index);
        prev_student->next = next_student;
    }
    
}
 
int main(int argc, char *argv[])
{
    bool bb = false;
    do
    {
        system("cls");
        cout << "---------------------------------------------------------" << endl;
        cout << setw(4) << "N" << setw(15) << "Name" << setw(15) << "Surname" << setw(6) << "Kurs" << setw(8) << "Points" << endl;
        cout << "---------------------------------------------------------" << endl;
        int max_count = count_nodes();
        if (max_count == 0) cout << "Empty table" << endl;
        else for (int i = 0; i < max_count; i++)
        {
            node *student = item(i);
            cout << setw(4) << (i+1) << setw(15) << student->name << setw(15) << student->surname << setw(6) << student->kurs << "  ";
            for (int j = 0; j < student->points_count; j++) cout << setw(3) << student->point[j];
            cout << endl;
        }
        cout << "------------------------------------------------------------" << endl;
        cout << "[1 - Add student] [2 - Remove student] [3 - Clear all table] [4 - Exit]" << endl << ":";
        int w; cin >> w;
        switch (w)
        {
        case 1:
            add_node();
            break;
        case 2:
            cout << "input remove index (1 - " << max_count << "):";
            int rem_index; cin >> rem_index;
            remove_node(rem_index-1);
            break;
        case 3:
            cout << "Continue?! (1 - Yes, 2 - No):";
            int answer; cin >> answer;
            if (answer == 1 && first)
            {
                recursive_remove(first);
                first = last = NULL;
            }
            break;
        case 4: bb = true;
        }
    }
    while (!bb);
    system("pause");
    if (first) recursive_remove(first);
    return 0;
}
Добавлено через 6 часов 5 минут
Может кто-нибудь подсказать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 19:54     Написать программу, которая реализует круговой список
Еще ссылки по теме:

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

написать функцию которая реализует Исключающее ИЛИ - C++
Напишите функцию bool Xor (bool x, bool y), реализующую функцию &quot;Исключающее ИЛИ&quot; двух логических переменных x и y. Функция Xor должна...

Создать программу, которая реализует журнал с оценками в виде двумерного массива - C++
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие задачи: Создать программу, которая реализует журнал с...

Программу, которая реализует решение задачи, через рекурсию, так и итеративной функции - C++
Я написал одну программу через рекурсию, как сделать вторую,через инеративную функцию? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Как написать программу, которая читает список целых int in array и количество повторов по каждой цифре? - C++
Необходимо написать программу, которая читает список целых int in array и количество повторов по каждой цифре. - программа должна...


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

Или воспользуйтесь поиском по форуму:
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 407
06.05.2014, 19:54  [ТС]     Написать программу, которая реализует круговой список #4
Мне подсказали, что бы список был круговым нужно добавить foot->next = head. А куда я не знаю. Помогите, пожалуйста

Добавлено через 2 часа 54 минуты
Вот ещё один вариант кода, но там нужно как-то добавить поиск

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
#include "stdafx.h"
#include <iostream>
 
struct list{// list - заголовок который содержит разную инфу о списке
private://доступ только из внутренних методов(функций)
    struct node{//да да структура которая существует только внутри другой ))
    //node - конкретный элемент
    //для списка без заголовка используется только node
    public:
        int _value;//тип данных в списке
                    //это может быть что угодно
                    //поставишь какой больше нравится
                    //разумеется придется поменять везде
        node *_next;
        node():_next(NULL),_value(NULL){}//конструктор пустого узла
                                        //после : идет список инициализации
        node(int val)//конструктор для первого и единственного узла в списке
                    //т.е. будет указывать сам на себя
        {
            this->_value = val;
            this->_next = this;
        }
        node(int val, node *ptr)//конструктор для общего узда
        {
            this->_value = val;
            this->_next = ptr;
        }
 
    };
 
    node *_ptr; //указатель на первый узел
    unsigned int _size; //размер
 
    node *_getLast()//забирает последный
                    //возвращает указатель на внутренний тип
                    //следовательно использование из вне невозможно
    {
        node *_tmp = this->_ptr;
        while(_tmp->_next != this->_ptr)//собственно сам способ перебора
                                        //пока выполняется некое условие
        {
            _tmp = _tmp->_next;         //меняем элемент списка на следующий 
        }
        return _tmp;
    }
public://доступ из любой точки кода
    list():_ptr(NULL),_size(NULL){}
    void add(int val) //добавить в конец(между первым и посследним) списка новый элемент
    {
        if(this->_size)//если список не пуст
        {
            //то мы тварим магию указателей
            node *_last = this->_getLast();
            node *_newNode = new node(val, _last->_next);
            _last->_next = _newNode;
        }
        else
        {
            //иначе вызываем конструктор для первого члена
            this->_ptr = new node(val);
        }
        this->_size++;
    }
 
    int get(const int id = 0)//получение записи с конкретным номером
    {
        if(id > this->_size || !id || id < 0 ) return NULL;
        
        int _poz = 1;
        node *_tmp = this->_ptr;
        while(_poz != id)
        {
            _poz++;
            _tmp = _tmp->_next;
        }
        return _tmp->_value;
    }
 
    void set(const int id, int val)//перезапись конкретного
    {
        if(id > this->_size) return;
        
        int _poz = 1;
        node *_tmp = this->_ptr;
        while(_poz != id)
        {
            _poz++;
            _tmp = _tmp->_next;
        }
        _tmp->_value = val;
    }
};
 
 
//тут только добовление
//получение и изменение некоторого
//сделаешь остальное - поймень как работает то что готово
 
int main()
{
    using namespace std;
    list *_ptr = new list;
    _ptr->add(1);//заполняем совершенно свободно
    _ptr->add(2);
    _ptr->add(3);
    _ptr->add(4);
    _ptr->add(5);
    cout << _ptr->get(4) << endl; //получаем некий элемент
    _ptr->set(4, 8, 5); //меняем его содержимое
    cout << _ptr->get(4) << endl; //выводим снова
    //поражаемся тому что это работает
    system("pause");
}
Yandex
Объявления
06.05.2014, 19:54     Написать программу, которая реализует круговой список
Ответ Создать тему
Опции темы

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