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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ [C++] Арканоид http://www.cyberforum.ru/cpp-beginners/thread403817.html
Здравствуйте, я самый на то есть начинающий программист,поэтому сразу прошу прощения, если вопросы будут не очень коректными.Очень расчитываю на вашу помощь. Задача состоит в следующем. Нужно написать Арканоид на VisualС++(в игре должна присутствовать простая минюшка и хотябы два, три уровня.Причём написание нового уровня не должно сводиться к переписанию половины кода).Нужно использовать движок...
C++ Найти и вывести координаты центра окружности Друзья, нужна помощь. Девушке задали лабы по СИ, она не шарит. Знакомых всех спросил, никто не может помочь. Вот она: 1. Диаметр окружности начинается в точке М1(x1,y1) и кончается в точке M2(x2,y2). Найти и вывести координаты её центра. 2. Числа X1 и X2 являются корнями приведенного квадратного уравнения. Найти и выве-сти наибольшее из чисел: sin(p) и cos(q), где p и q являются его вторым и... http://www.cyberforum.ru/cpp-beginners/thread403801.html
system("") C++
Хотел узнать, есть справочник хотя бы о большинстве команд в system("")? Сам искал, ничего хорошего не нашел.
C++ Геометрические задачи
Составить программу вычисления сторон треугольника, если известны радиус описанного вокруг него круга и градусные меры двух его углов. #include <iostream.h> #include <conio.h> #include <math.h> main() { float a, b, c, R, x, y, z; cout<<"Vvedit qradysny miry dvoh kytiv i radiys opusanogo kola: ";
C++ Минимальное количество монет http://www.cyberforum.ru/cpp-beginners/thread403778.html
Есть такая задача: Денежная система некоторой страны предоставляет монеты номиналом с, = 1, с2, ..., сN. Как выдать сумму S с помощью минимального числа монет? Вход. В первой строке — сумма S и количество номиналов N, во второй — значения номиналов: 1<N≤20, 1=с1<с2<...< сN≤50000, S≤100000. Выход. В первой строке — минимальное количество монет, во второй — N чисел (количества монет каждого...
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="; cin>>b; подробнее

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

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

10.12.2011, 19:31. Просмотров 576. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru