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

Сортировка вставками в односвязном списке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как поставить условие http://www.cyberforum.ru/cpp-beginners/thread354039.html
Есть переменные: x1, x2, y1, y2. И нужно сделать следующее: Прибавить к x1 единицу (++x1) в том случае если выполняется одно из условий: 1) x1 не равен x2 и y1 не равен y2 2) x1 равен x2 или y1...
C++ Найти произведение элементов вектора Всем форумчанинам привет, прошу помощи решения задачи Задача: Найти произведение элементов вектора (массивы не использовать, значения перемножать по мере ввода). http://www.cyberforum.ru/cpp-beginners/thread354031.html
Простая база данных с помощью массива C++
здравствуйте. Помогите пожалуйста, можете написать пример простейшей базы данных созданной с помощью массива. База состоит из 3-5 строк,в каждой из которых фио и год рождения.операции с базой данных...
C++ Определить дату предыдущего дня
Все доброго времени суток. Нужна помощь в решении задачи. Заранее огромное спасибо. Вот собственно и задача: "Дата некоторого дня определяется двумя натуральными числами: порядковым...
C++ идеальное хеширование http://www.cyberforum.ru/cpp-beginners/thread353967.html
В лабораторной работе задание "реализовать идеальное хеширование". в методичке очень мало материала по хешированию и по данному вопросу в частности. Посоветуйте какую-нибудь литературу или статью по...
C++ MS VS in CODE BLOCKS Делал проекты в VISUAL C++ EXPRESS. Сеичас пересел на LINUX, пользуюсь CODE BLOCKS . Есть какие-нибудь варианты как открыть проекты написанные в VS C++ - в CODE BLOCKS? ПС: не нужно писать типа ты... подробнее

Показать сообщение отдельно
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517

Сортировка вставками в односвязном списке - C++

20.09.2011, 14:18. Просмотров 5650. Ответов 24
Метки (Все метки)

Собственно нужно реализовать такую сортировку, но что-то не могу я придумать как её реализовать именно в односвязном списке, у нас ведь доступ не прямой как у массива здесь ... есть варианты?
Собственно код моего односвязного списка (большим количеством места отделены функции которые вряд-ли понадобятся для сортировки, я их просто оставил для целостности, 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
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
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
 
class List
{
    struct element
    {
        element(string s, element *next=NULL)
        {
            data=s;
            Next=next;
        }
        string data;
        element *Next;
    };
 
    element *Head;
    element *Tail;
 
public:
    List(string str)
    {
        Head=new element(str,0);// второй аргумент - адрес для сл.элемента
        Tail=Head;
    }
 
    void addToTail(string str)
    {
        element *temp=new element(str,0);
        if (Tail)
        {
         Tail->Next=temp;
         Tail = temp;
        }
        else
         Head=Tail=temp;
    }
 
    void addToHead(string str)
    {
        element *temp=new element (str,0);
        if(Head)
        {
            temp->Next=Head;
            Head = temp;
        }
        else
         Head=Tail=temp;
    }
 
    void print()
    {
        element *temp=Head;
        while(temp)
        {
            cout<<temp->data<<' ';
            temp=temp->Next;
        }
        cout<<endl;
    }
 
    void sort()
    {
        bool flag=true;
    }
 
 
 
 
 
 
 
 
 
 
    void reverse()
    {
        if(!Head)
         return;
 
        element *temp=Head;
        element *newHead;
        element *newTail;
        element *prev;
        element *add;
        if (temp)
        {
            add=new element(temp->data,0);
            newTail=add;
            prev=add;
        }
        temp=temp->Next;
        while(temp)
        {
            add=new element(temp->data,prev);
            newHead=add;
            prev=add;
            temp=temp->Next;
        }
        free();
        Head=newHead;
        Tail=newTail;
    }
 
    void free()
    {
        this->~List();
    }
 
 
    ~List()
    {
        element *temp;
        while(Head)
        {
            temp=Head;
            Head=Head->Next;
            delete temp;
        }
        Head=Tail=temp=NULL;
    }
};
 
int main()
{
    List test("simple");
    test.addToTail("text");
    test.addToTail("is");
    test.addToTail("so");
    test.addToTail("simple");
    test.print();
//    cout<<"After reverse():\n";
//    test.reverse();
//    test.print();
//    test.addToTail("text");
//    test.print();
}
Мне также подойдёт пример и с Вашим односвязным списком (если Вы например делали свой односвязный список с сортировкой вставками и у Вас остался код).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru