Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Добры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 09:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу, которая реализует круговой список (C++):

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

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

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

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

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

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

3
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.05.2014, 09:35 #2
Цитата Сообщение от avatar1870 Посмотреть сообщение
Добры
конечно добры
0
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 минут
Может кто-нибудь подсказать?
0
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");
}
0
06.05.2014, 19:54
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; ...


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

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

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