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

Кольцевой односвязный список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать структуру с именем WORKER http://www.cyberforum.ru/cpp-beginners/thread271315.html
описать структуру с именем WORKER содержащую следующие поля: Фамилия инициалы роботника; названия занемаемой должности; год поступления.
C++ Преобразование из ASCII в символ Подскажите, есть двумерный массив, int Massiv={{'H','E','L','L','O'}, {'W','O','R','L','D'}}; после for (int m=0;m<2;m++) { for (int n=0;n<5;n++) { http://www.cyberforum.ru/cpp-beginners/thread271308.html
Написать шаблон функции, и Создать класс. C++
Помогите ктота пожалуста ... Ето надо на С++ зделать. Спасибо за рание! 1. Написать шаблон функции вычисления произведения двух векторов. 2. Создать класс, в котором есть переменные-члены и одномерный массив. Инициализировать элементы массива случайными числами через внутренний указатель класса this.
C++ Классы
Разработать классы для описанного ниже объекта.Включить в класс методы(...),get (...),show (...).Определить другие методы.Написать программу,демонстрирующую работу с этим классом.Класс соответствует индивидуальному варианту. Person:Фамилия,Имя,Отчество,Адрес,Пол,Образование,Год рождения.Определить является ли человек совершеннолетним.
C++ Объединения, поля битов, перечисления http://www.cyberforum.ru/cpp-beginners/thread271247.html
всем доброго времени суток есть у меня задача затрудняюсь сделать сам вот само задание Перевести целое положительное двухбайтное число из десятичной в шестнадцатеричную систему счисления: использую эти самые поля битов я сейчас буду писать если кто может помочь или подсказать пишите буду благодарен. Добавлено через 5 минут так ну поля битов я кажется понял подскажиет ка модно реализовать...
C++ Засечь время выполнения поиска Создается массив случайных чисел, сортируется, и затем проводится поиск по этому массиву. Для определения время сортировки использовал clock_t, но использование в моем случае возвращается 0, если подумать, то 0 означает, что время выполнения функции очень мало. Можно ли как-нибудь засечь время с точностью большей, чем в миллисекундах? подробнее

Показать сообщение отдельно
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
07.04.2011, 14:09     Кольцевой односвязный список
понятно.
Основынм элементом связного списка является узел. Узел хранит полезные данные (в нашем случае это фамилии студентов) и обеспечивает связь со следующим элементом. Узел удобно описывать как структуру. Например такую:
C++
1
2
3
4
struct nodes{
    char data[str_size];
    nodes* next;
};
где str_size максимальная длинна символьного массива.

Отлично, едем дальше. У нас стоит задача построить кольцевой односвязный список. Описываем класс с минимальным набором функций - добавление/удаление узла, просмотр данных узла (без возможности редактирования), навигация по списку. вместе с указателем на голову(начало) списка получим минимальный комплект. Для удобства добавим счетчик узлов и возможность перехода к первому узлу. Имеем следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class my_list{
    public:
        void insert(char* str); //Вставляет запись за текущей.
        void del_next();        //Удаляет запись за текущей.
        void go_next();         //Переходит к следующей записи.
        void go_first();        //Переходит к первой записи.
        const char* show();     //возвращает указатель на хранимые данные.
        int  size();            //Возвращает количество элементов в списке.
 
        my_list();
        ~my_list();
    private:
        nodes*  head;           //начало списка.
        nodes*  position;       //активная (текущая) запись.
        int     count;          //количество элементов списка.
        
        void free();            //удаляет все элементы, освобождает память
};
реализация методов my_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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
my_list::my_list(){
    head = NULL;
    count = 0;
    go_first();
}
 
my_list::~my_list(){
    free();
}
 
//public:
 
void my_list::insert(char* str){
//Вставляет запись за текущей.
    nodes* new_node = new nodes;
    strcpy(new_node->data,str);
    if(position != NULL){
        new_node->next = position->next;
        position->next = new_node;
    }else{
        new_node->next = new_node;
        position = head = new_node;
    }
    count++;
}
 
void my_list::del_next(){
//Удаляет запись за текущей.
    if (position != NULL){
        nodes* tmp = position->next;
        position->next = position->next->next;
        
            if(tmp == head) head = tmp->next;
        delete tmp;
    }
    count--;
}
 
void my_list::go_next(){
//Переходит к следующей записи.
    if (position != NULL)
        position = position->next;
}
 
void my_list::go_first(){
//Переходит к первой записи.
    position = head;
}
 
const char* my_list::show(){
//возвращает указатель на хранимые данные.
    if(position != NULL)
        return position->data;
    else
        return NULL;
}
 
int my_list::size(){
//Возвращает количество элементов в списке.
    return count;
}
 
// private:
 
void my_list::free(){
//удаляет все элементы, освобождает память
    go_first();
    while(head->next != head) del_next();
    del_next(); 
}


на этом описание класса связного списка завершено
примеры обращения из main:
примеры
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
int main(){
    char name1[] = "Иванов";
    char name2[] = "Петров";
    char name3[] = "Сидоров";
    //создание списка студентов:
    my_list student_list;
    
    //добавляем записи в список.
    student_list.insert(name1);
    student_list.insert(name2);
    student_list.insert(name3);
 
    //вывод списка на консоль:
    student_list.go_first();
    for(int i = 1;i<=student_list.size();i++){
        std::cout<<student_list.show()<<std::endl;
        student_list.go_next();
    }
 
    //удаление первого элемента из трех:
    student_list.go_first();
    student_list.go_next();
    student_list.go_next();
    student_list.del_next();
    
    //вывод отредактированного списка на консоль:
    student_list.go_first();    
    for(int i = 1;i<=student_list.size();i++){
        std::cout<<student_list.show()<<std::endl;
        student_list.go_next();
    }
    
return 0;
}


И в завершение необходимые для работы хидеры и константы:
C++
1
2
3
#include<iostream>
#include<string.h>
const int str_size=256;
 
Текущее время: 19:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru