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

Односвязный список - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Dev-c++ http://www.cyberforum.ru/cpp-beginners/thread73063.html
Так получилось, что должен некоторое время поработать в этом известном бесплатном компиляторе. В отличие от builder'а, где AnsiString интегрирован, такого удовольствия в dev-c++ нет. Зато есть...
C++ Не получается вызвать функцию Есть функция "void __fastcall TForm1::Image2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)" Нужно вызвать ее в другой функции.. Как это сделать?? ... http://www.cyberforum.ru/cpp-beginners/thread73062.html
перевод в двоичную систему через классы C++
Помогите решить задачу используя классы. Дано натуральное число Р. Переведите его в двоичную систему счисления.
Создание и обработка файлов в С C++
Для участия в конкурсе исполнителей необходимо заполнить анкету с данными: -Ф.И.О; -год рождения; -название страны; -класс музыкального инструмента (гитара, фортепиано, скрипка). Вывести список...
C++ Изменение длины строк в динамическом массиве. http://www.cyberforum.ru/cpp-beginners/thread73048.html
Доброго времени суток! Имеется код : #include "stdafx.h" #include <iostream.h> #include <stdlib.h> int main() { int t,a=0,b=0,z,x,y,s; int **mas; cout<<"vvedite kol-vo strok : ";
C++ Матрица, заменить диагонали - нулями Пожалуйста, помогите с программой на Си (C), буду очень благодарен за помощь. Вот условие: 1) Дано матрицу А размером 6х6. Заменить в матрице элементы главной диагонали нулями. Нашол аналогичною... подробнее

Показать сообщение отдельно
utwo
3 / 3 / 0
Регистрация: 10.10.2009
Сообщений: 108
13.12.2009, 20:36  [ТС]
В принципе пока никаких изменений не вносилось. Тот же код что был указан выше, плюс исправление на счет сортировки.
Вот.
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <iostream>
 
struct nodes
{
        
        void sort();
        void push(int value);
        void pop(int* value);
        void show();
        bool is_full();
        
        int* array;
        nodes* prior;
        
        nodes(){array = new int [10];top = 0;}
        ~nodes(){delete[] array;}
        int top; // показывает на первое свободное место
};
//============================================================
struct linked_lists
{
 
                void show(); // для контроля
                void add(int value);
                                
                linked_lists(){tail = NULL;}
                ~linked_lists();
                nodes* tail;            
};
 
//============================================================
int main()
{
        linked_lists a;
        
        a.show();
        system("pause");
        for(int i=0;i<15;i++) 
        {
                a.add(-i*i+10*i);
                a.show();
                system("pause");
        }
        system("cls");
        
        
        a.show();       
    system("pause");
   delete &a;
    system("pause");
        return 0;
}
 
//============================================================
void nodes::push(int value)
{
        if (top>9) return; // на всякий случай.
        array[top++]=value;
}
 
void nodes::pop(int* out)
{
        if (!top) return; // на всякий случай.
        
        *out = array[--top];
}
 
void nodes::show()//для контроля
{
        for(int i=0;i<top;i++) std::cout<<"  "<<array[i];
}
 
void nodes::sort()                                      //вставками.
{ 
        int tmp, i, j;
        for ( i=0; i < top; i++)
        {  
            tmp = array[i];   
        for ( j=i-1; j>=0 && array[j] > tmp; j--)
                array[j+1] = array[j];
        array[j+1] = tmp;
        }
}
bool nodes::is_full()
{
        return (top==10);
}
 
 
// =====================================================================
void linked_lists::add(int value)
{
        if (tail==NULL) { tail = new nodes(); tail->prior=NULL;}
        //если список пуст, создаём узел.
 
        if(!tail->is_full())// если узел не полнoн, то засовываем туда value
        {
                tail->push(value);
                tail->sort();
        }
        else 
        //если узел полон, создаем новый, перекидываем в него пять последних элементов
        {
                nodes* node = new nodes();
                node->prior = tail;//связали со списком.
                
                int tmp;
                for(int i=1;i<=5;i++)
                {
                        tail->pop(&tmp);
                        node->push(tmp);
                }
                // 5 элемент сравнивается с value. больший отпавляется в новый узел.
                // меньший остается.
                tail->pop(&tmp);
                if(value<tmp) {tail->push(value);node->push(tmp);}
                else {tail->push(tmp);node->push(value);}
                
                // осталось только переопределить указатель на хвост
                
                tail = node;
 
                tail->sort();
                tail->prior->sort();;
                
        }
        
}
 
 
void linked_lists::show()
{
        if(tail==NULL) {std::cout<<"\n linked-list is empty now..\n\n";return;}
        nodes* ip = tail;
        while (true)
        {
                std::cout<<ip;
                ip->show();
                std::cout<<"\n";
                if(ip->prior==NULL)     break;
                ip=ip->prior;
        }
 
}
 
linked_lists::~linked_lists()
{
        if(tail==NULL) {std::cout<<"\nmemory is free!!\n";return;}
        
        nodes* ip = tail;
        while (ip->prior!=NULL)
        {
                tail = ip;
                ip=ip->prior;
                delete tail;
        }
        delete ip;
        std::cout<<"\n memory is free!!!";      
        }
 
 
//======================================================================


Открытым остался вопрос по поводу системных ошибках при компиляции.
Ошибки пропали после комментирования оператора удаленияdelete &a. Но на сколько это правильно?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru