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

Сортировка линейного однонаправленного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ [C++] Арканоид http://www.cyberforum.ru/cpp-beginners/thread403817.html
Здравствуйте, я самый на то есть начинающий программист,поэтому сразу прошу прощения, если вопросы будут не очень коректными.Очень расчитываю на вашу помощь. Задача состоит в следующем. Нужно...
C++ Найти и вывести координаты центра окружности Друзья, нужна помощь. Девушке задали лабы по СИ, она не шарит. Знакомых всех спросил, никто не может помочь. Вот она: 1. Диаметр окружности начинается в точке М1(x1,y1) и кончается в точке... http://www.cyberforum.ru/cpp-beginners/thread403801.html
system("") C++
Хотел узнать, есть справочник хотя бы о большинстве команд в system("")? Сам искал, ничего хорошего не нашел.
C++ Геометрические задачи
Составить программу вычисления сторон треугольника, если известны радиус описанного вокруг него круга и градусные меры двух его углов. #include <iostream.h> #include <conio.h> #include...
C++ Минимальное количество монет http://www.cyberforum.ru/cpp-beginners/thread403778.html
Есть такая задача: Денежная система некоторой страны предоставляет монеты номиналом с, = 1, с2, ..., сN. Как выдать сумму S с помощью минимального числа монет? Вход. В первой строке — сумма S и...
C++ Блок-схема Помогите составить блок-схему #include<iostream.h> #include<math.h> main(){ float a,b,m,h,x,y; setlocale(LC_ALL,"Russian"); cout<<"Начало отрезка a="; cin>>a; cout<<"Конец отрезка b=";... подробнее

Показать сообщение отдельно
Валентин^_^
23 / 23 / 5
Регистрация: 15.10.2009
Сообщений: 167

Сортировка линейного однонаправленного списка - C++

10.12.2011, 19:31. Просмотров 594. Ответов 0
Метки (Все метки)

Всем привет)
Нужно отсортировать линейный однонаправленный список. Как это можно сделать?
Причем нужно менять местами не данные, а указатели..

Вот код программы, список структур. Помогите плиз с сортировкой

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
#include "stdafx.h"
#include <clocale>
#include <iostream>
 
using namespace std;
 
struct Train
{
    char *Destination;
    int TrainNumber;
    char *Time;
    Train *next;
};
 
void init_train(Train &train);
void deinit_train(Train &train);
bool add_train(Train *&head, Train src);
void sort_train(Train *head, int n);
Train *search_train(Train *head, int TrainNumber);
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    const int n = 3;
 
    Train *head = NULL;
 
    Train buf;
 
    for(int i = 0; i < n; i++)
    {
        init_train(buf);
 
        cout << "Пункт назначения: ";
        cin >> buf.Destination;
        cout << "Номер поезда: ";
        cin >> buf.TrainNumber;
        cout << "Время отправления: ";
        cin >> buf.Time;
 
        if(!add_train(head, buf))
            return 0;
    }
 
    sort_train(head, n);
 
    Train *srch = head;
    for(int i = 0; i < n; i++)
    {
        cout << srch->Destination << " #" << srch->TrainNumber << ": " << srch->Time << endl;
        srch = srch->next;
    }
 
    /*int train_number;
    cout << "Введите номер поезда для поиска: ";
    cin >> train_number;
    Train *srch = search_train(head, train_number);
    if(srch != NULL) cout << srch->Destination << " #" << srch->TrainNumber << ": " << srch->Time << endl << endl;
    delete [] srch;*/
 
    delete [] head;
    deinit_train(buf);
 
    system("pause");
    return 0;
}
 
void init_train(Train &train)
{
    train.Destination = new char[150];
    train.TrainNumber = -1;
    train.Time = new char[20];
    train.next = NULL;
}
 
void deinit_train(Train &train)
{
    delete [] train.Destination;
    train.Destination = NULL;
    delete [] train.Time;
    train.Time = NULL;
}
 
bool add_train(Train *&head, Train src)
{
    if(head == NULL)
    {
        head = new Train;
        head->Destination = src.Destination;
        head->TrainNumber = src.TrainNumber;
        head->Time = src.Time;
        head->next = NULL;
        return true;
    }
    else
    {
        Train *p = head;
        while(p->next != NULL)
            p = p->next;
        p->next = new Train;
        *(p->next) = src;
        p->next->next = NULL;
        return true;
    }
    return false;
}
 
void sort_train(Train *head, int n)
{
    Train *buf;
    
    bool change;
    do
    {
        Train *p = head;
        change = false;
        for(p = head; p->next != NULL && p->next->next != NULL; p = p->next)
        {
            if(p->TrainNumber > p->next->TrainNumber)
            {
                /*if(head != NULL)
                {
                    buf = p->next;
                    p->next = buf->next;
                    buf->next = head;
                    head = buf;
                }
                else
                {
                    
                }*/
                change = true;
            }
        }
    }
    while(change);
}
 
Train *search_train(Train *head, int TrainNumber)
{
    if(head == NULL) return NULL;
    Train *p = head;
    while(p != NULL && p->TrainNumber != TrainNumber)
        p = p->next;
    return p;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru