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

Создания однонаправленного списка и сохранения в типизированный файл. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс-Контейнер Вектор http://www.cyberforum.ru/cpp-beginners/thread269559.html
Подскажите пожалуйста, как заполнить вектор латинским алфавитом?
C++ Обработка нажатия клавиши без подтвержения enter Здравствуйте, уважаемые программисты. Подскажите в чем проблема. Вывожу рисунок посредством команды dos в языке turbo c. Необходимо зациклить вывод картинки до нажатия клаши esc. При нажатии стрелки... http://www.cyberforum.ru/cpp-beginners/thread269546.html
FirstBlood C++
Добрый вечер, форумчане. добрался до winapi :D . как говорится без практики ни куда. так вот. после внимательного прочтения, попробовал написать в VisuatStudio стандартную прогу helloworld. ...
C++ В чем ошибка
Странно выдает ошибку на это, ничего не понимаю, почему? char * text; *text = 'h'; *text = 'o'; *text = 'u'; *text = 's'; *text = 'e'; Выдает Необработанное исключение в "0x004013dc" в...
C++ помогите сделать!!!! http://www.cyberforum.ru/cpp-beginners/thread269527.html
Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10 р., за корову - 5 р., а за теленка - 0,5 р., если на 100 р. надо купить 100 голов скота? Нужно сделать...
C++ Посимвольная проверка строк без массива Всем доброго времени суток, собственно, сабж: Нужно проверить 2 строки посимвольно на наличие одинаковых элементов, но без использования массива. Я думаю, что есть стандарная функция C++. Если кто... подробнее

Показать сообщение отдельно
Vladimir.
157 / 157 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.04.2011, 19:42
в сmd:
  • >car.exe datafile.txt resultfile.txt

nodes
C++
1
2
3
4
5
6
7
8
9
struct nodes{
    char category[str_size];    //категория (тип)
    char company[str_size];     //компания-производитель
    float swept;                //от "swept volume" - литраж
    float mileage;              //пробег(в милях, но нам не важно)
    float price;                //цена автомобиля
    
    nodes* tail;                //тут будет адресс следующего элемента. 
};

my_linked_list
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class my_linked_lists{
    public:
        int add(nodes* node);   //будет добавлять узлы в начало списка
        int gsort(void);        //сортирует список по убыванию пробега
        const nodes* get_node(int i); 
                                //возвращает указатель на i-тый узел.
        
        int size(void)
            {return count;};    //возвращает количество элементов списка
        
        my_linked_lists()   :head(NULL), count(0) {};
        ~my_linked_lists()  {free();};
    private:
        int free();             //освобождает память.
        nodes* head;            //указатель на голову.
        int count;              //количество узлов в списке.
};

его функционал
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
const nodes* my_linked_lists::get_node(int i){
    assert(i>0);
//возвращает указатель на i-тый узел списка, 
// либо NULL если i-того узла не существует
    if(i>count) return NULL;
    nodes* tmp = head;
    for(int j=1;j<i;j++) tmp = tmp->tail;
 
return tmp; 
}
int my_linked_lists::gsort(void){
    if(head == NULL) return 0;      //пустой список отсортирован изначально
    if(head->tail == NULL) return 0;//список из одного элемента - тоже.
    
    nodes** array = new nodes*[count];
    nodes* tmp = head;
    for(int i = 0;i<count;i++){
        array[i] = tmp;
        tmp = tmp->tail;
    }
    //сортировка выбором:
    //1. находим минимальное значение в текущем списке
    //2. производим обмен этого значения со значением на первой неотсортированной позиции
    //3. сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы
    //4.повторяем шаги 1-3, пока массив не будет отсортирован.
    
    for(int sorted = 0;sorted < count-1;sorted++){
        //ищем индекс максимального элемента подстроки:
        int imax = sorted;          
        for(int i = 0;i<count;i++)
            if (array[imax]->mileage < array[i]->mileage)
                imax = i;
        //производим обмен индексов максимального и 
        //первого не отсортированного:
        tmp = array[0]; 
        array[0] = array[imax]; 
        array[imax] = tmp;
    }
    
    //выстраиваем связи в списке согласно упорядоченому массиву:
    head = array[0];
    for(int i = 0;i<count-1;i++)
        array[i]->tail = array[i+1];
    
    array[count-1]->tail = NULL; //последний элемент в массиве.
    //массив больше не нужен - освобождаем память:
    delete array;
    
return 0;
}
int my_linked_lists::add(nodes* node){
// добавляет узел в наш список.
 
    //создадим объект-копию node (для этого копируем все поля node в tmp)
    nodes* tmp = new nodes;
    strcpy(tmp->category,node->category);
    strcpy(tmp->company,node->company);
    tmp->swept      =   node->swept;
    tmp->mileage    =   node->mileage;
    tmp->price      =   node->price;
    
    // теперь добавим объет-копию к нашему связному списку:
    tmp->tail = head;
    head = tmp;
    count++;
    
return 0;
}
int my_linked_lists::free(){
//вызывается деструктором, удаляет узлы списка.
    nodes* tmp = head;      // итерирующий указатель
    while(tmp!=NULL){
        //исключаем из списка, потом удаляем:
        head = tmp->tail;
        delete tmp;
        tmp = head;
        
        count--;
    }
    //список пуст.
return 0;
}


main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int get_fname(char* fname1, char* fname2, char** argv);
int load_data(char* fname, my_linked_lists* list);
int save_data(char* fname, my_linked_lists* list);
 
int main(int argc, char* argv[]){
 
    char fload[str_size];   //имя фаила из которого читаем
    char fsave[str_size];   //имя фаила в который пишем
    //перехватываем значения параметров командной строки:
    get_fname(fload,fsave,argv);
    //создаем объект класса связный список.
    my_linked_lists list;
    //заполняем его из фаила данных:
    load_data(fload,&list);
    //сортируем:
    list.gsort();
    //сохраняем в фаил результата:
    save_data(fsave,&list);
    
 
return 0;
};


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