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

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

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

C++ Написать программу, которая реализует функцию с неограниченным количеством параметров, организовывающую форматированный вывод на экран.
C++ Создать программу, которая реализует журнал с оценками в виде двумерного массива
C++ Написать программу которая реализует шифр Цезаря, т.е. каждая буква заменяется на следущую за ней по алфавиту, а последняя буква заменяется первой
C++ Написать программу на языке С + + которая реализует конструктор который инициализирует исходные данные класса
C++ написать программу которая реализует возможность управления запиписом, вывод, и удалением элементов в противнях
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,865
Записей в блоге: 2
Завершенные тесты: 1
05.05.2014, 09:35     Написать программу, которая реализует круговой список #2
Цитата Сообщение от avatar1870 Посмотреть сообщение
Добры
конечно добры
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 401
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 минут
Может кто-нибудь подсказать?
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 401
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     Написать программу, которая реализует круговой список
Ответ Создать тему
Опции темы

Текущее время: 17:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru