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

абстрактный тип данных - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Копирование строк с файла http://www.cyberforum.ru/cpp-beginners/thread329960.html
Есть прога которая находит наименьшее слово в файле(находит). #include <iostream> #include <fstream> #include <string> #include <sstream> #include <vcl.h> #pragma hdrstop #pragma argsused #include <iomanip>
C++ Stack around the variable 's' was corrupted Помогите разобраться! Не пойму почему иногда при использовании в программе переменных char при закрытии программы выскакует одна и та же ошибка: Run-Time Check Failure #2 - Stack around the variable 's' was corrupted. Пример кода: #include <stdio.h> int main() { char s; scanf("%s",s); return 0; http://www.cyberforum.ru/cpp-beginners/thread329939.html
C++ игра BlackJAck с использованием ООП
собственно вопрос: как написать игру блекджек используя классы С++? мне не нужен код чей либо, я не прошу писать за меня, я прошу натолкнуть на идею с чего начать ?
Получить все символы,расположенные между первым и вторым двоеточием C++
2.Известно что в исходной строке есть двоеточие.получить все символы,расположенные между первым и вторым двоеточием.если второго двоеточия нет,то получить все символы,расположенные после единственно имеющегося двоеточия. 3.работа с массивами. дана действительная квадратная матрица порядка n.Вычислить сумму тех из ее элементов,расположенных на побочной диагонали и выше нее,которые превосходят...
C++ оператора индексации+класс+структура http://www.cyberforum.ru/cpp-beginners/thread329904.html
Задача такая нужна создать словарь терминов. 1.Создаю свой тип данных помощью struct term (слово термин) definition (определение к термину) 2.Создаю класс Dictionary в классе 2 переменных string (термины и определение) size (размер динамического масива string)
C++ Путь к процессам Нашел вот такой код#include <windows.h> #include <Psapi.h> int main(){ int pid = 3432; // PID of notepad.exe char buffer; HANDLE proc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); GetModuleFileNameEx(proc, 0, buffer, MAX_PATH); MessageBox(0,buffer,"",0); подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
06.07.2011, 05:57     абстрактный тип данных
Вот написал двухсвязной список с абстрактным типом данных.
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
#include <stdio.h>
#include <stdlib.h>
#include <string>
 
template<class T>
class  xList {
     struct xNode {
        T       data;
        xNode*  next;
        xNode*  prev;
     };
private:
        xNode*  link;
        xNode*  iter;
        size_t    size;
        size_t    len;
public:
        xList(void): link(NULL), size(0U), len(0), iter(NULL){}
 
        xList(xList&  hLst) {  // конструктор копирования
           link = iter = NULL;
           size = len  = 0U;
           hLst.reset_next();
           while(hLst.is_read()) {
              this->add_tail( hLst.current());
              hLst.move_next();
           }
           hLst.reset_next();
    }
    ~xList(){ this->clear(); }
public:
    // вставить элемент в конец "хвост"
       void  add_tail(T  hData) {
            xNode * node = new xNode();
            node->data   = hData;
            if(! link) {
                link       = node;
                node->next = link;
                node->prev = link;
            } else {
                node->next = link;
                node->prev = link->prev;
                link->prev->next = node;
                link->prev       = node;
            }
            size++;
        }
 
    // вставить элемент в начало "голову"
        void  add_head(T  hData) {
             xNode * node = new xNode();
             node->data   = hData;
             if(! link) {
                  link = node;
                  node->next = link;
                  node->prev = link;
             } else {
                  node->next = link;
                  node->prev = link->prev;
                  link->prev = node;
                  link = node;
             }
             size++;
    }
 
       // удалить самый первый элемент из "головы выбить"
        void  pop_head(void) {
            if(size <= 1u) {
                   this->clear();
                 return;
            }
            xNode* ptr = link;
            link           = link->next;
            link->prev  = ptr->prev;
            link->prev->next = ptr->next;
            delete  ptr;
            ptr = NULL;
            size--;
    }
 
       // удалить самый последний элемент "укоротить хвост" 
        void   pop_tail(void) {
             if(size <= 1u) {
                   this->clear();
                return;
             }
             xNode*  ptr = link->prev;
             link->prev   = ptr->prev;
             link->prev->next = ptr->next;
             delete  ptr;
             ptr = NULL;
             size--;
     }
 
        //  Удалить элемент по-индексу из списка
         void  remove(size_t  hIndex) {
              if( hIndex + 1u >= size) {
                     this->pop_tail();
                   return;
               }
               if( ! hIndex) {
                    this->pop_head();
                   return;
               }
               xNode*  tmp = link;
               while(hIndex--)
                   tmp = tmp->next;
               xNode* ptr = tmp;
               tmp->prev->next = tmp->next;
               tmp->next->prev = tmp->prev;
               delete ptr;
               ptr = NULL;
               size--;
         }
 
         // присвоить данные по-индексу
         void   set_data(size_t  hIndex, T  hData) {
              xNode*  ptr = link;
              while(hIndex--)
                    ptr = ptr->next;
              ptr->data = hData;
         }
 
         // получить данные по-индексу
         T&  get_data(size_t  hIndex) {
              xNode*  ptr = link;
              while(hIndex--)
                    ptr = ptr->next;
              return ptr->data;
    }
 
         // проверка на "жизнь" списка
         bool  is_null(void) const {
              return  ( ! link) ? false : true;
         }
 
        T&   get_head(void) { return link->data; }  // получить первый элемент
        T&   get_tail(void) { return link->prev->data; } // получить последний элемент
 
         // поиск элемента по-указанному элементу, возвращает индекс
        int  find(T  hFind)  {
              size_t  cnt = size;
              int     len   = 0;
              for(xNode*   iter = link; cnt-- ; iter = iter->next, len++ ) {
                     if(iter->data == hFind)
             return  len;
              }
              return  -1;
         }
 
        // получить кол-во элементов в списке
        size_t   get_size(void) const { return  size; }
 
      //  полное удаление всех элементов списка NULL=PTR
       void  clear(void) {
            while( size-- ) {
                xNode*  ptr = link;
                link = link->next;
                delete ptr;
                ptr  = NULL;
            }
            size = 0u;
            link = NULL;
        }
        
        // метод для чтения данных
        bool  is_read(void) {
            if(len--)
                 return true;
            return  false;
        }
 
       void   reset_next(void){ iter = link; len = size; } // приготовить список для прохода вперёд
       void   reset_prev(void){ iter = link->prev;len = size;}  // приготовить список для прохода назад
       void   move_next(void){  iter  = iter->next; }   // передвинуться на элемент вперёд
       void   move_prev(void){  iter  = iter->prev; }   // передвинуться на элемент назад
 
        T&  current(void) { return  iter->data; } // возвращает текущий элемент итерирования
};
 
 
// структура для испытания списка
struct  person {
   char name[18];
   char city[18];
   int  age;
   person(void) {}
   person(const char*  name, const char* city, int age) {
       strcpy(this->name, name);
       strcpy(this->city, city);
       this->age =  age;
   }
};
 
 
 
 
void main(void)
{
    xList<long>  src;
 
    src.add_tail(2000L);    // добавляем данные в список
    src.add_head(7000L);
    src.add_head(5000L);
    src.add_head(6000L);
    src.add_head(5000L);
    src.add_head(4000L);
    src.add_head(3000L);
 
    xList<long>  dst(src);  // копируем все элементы в дургой список
 
    src.clear();   // удаляем первый список
      
    dst.reset_next();            // приготовиться для прохода вперёд
    while( dst.is_read() )  {
               dst.current() *= 2L;   // умножаем все элементы
        dst.move_next();  // движемся вперёд
    }
 
    int index = dst.find(4000L);  // найти значение
    if(index != -1)  // если нашли показываем результат
          printf("Find number - %d\n", dst.get_data(index));
    
    dst.set_data(dst.get_size() / 2, -7000000L);  // присвоим серединому элементу новое значение
 
    printf("get size xList = %d\n",    dst.get_size());
    printf("get last element: %d\n",  dst.get_tail() );
    printf("get first element: %d\n",  dst.get_head() );
 
    printf("get data to index: %d\n",  dst.get_data(2));
 
    dst.reset_prev();         // приготовить список для прохода назад
    while( dst.is_read() )  {
          printf("\t%d\n", dst.current() );  // выводим
          dst.move_prev(); 
    }
      
    dst.remove(dst.get_size() >> 1);  // удалим элемента котрый находиться по-середине
    dst.pop_head();  // удалить самый первый
    dst.pop_tail();    // удалить самый последний
 
    while( dst.is_null() ) {   // чтение списка с физическим удалением элементов с конца
                printf("-> %d\n", dst.get_tail() );
         dst.pop_tail();
    }
    puts("\n");
 
 
    // тестируем список со структурой    
    xList<person>  plist;
    plist.add_tail(     person("Igor", "Moscow", 25) ); 
    plist.add_head( person("Pavel", "Voronez", 32) );
    plist.add_tail(     person("Sveta", "Chita", 27) );
    plist.add_head( person("Olga", "Tula", 25) );
    plist.add_head( person("Tolik", "Saratov", 22) );
    plist.add_head( person("Marina", "Orenburg", 25) );
 
    person p;                  // здесь ввод
    printf("name: ");
    scanf("%s", p.name);
    printf("city: ");
    scanf("%s", p.city);
    printf("age: ");
    scanf("%d", &p.age);
    plist.add_head(p);
 
    plist.set_data( 2, person("Tarlan", "Ufa", 30));
      
    plist.reset_next();
    while( plist.is_read() ) {
         if(plist.current().age == 25)
               printf("\t\tFN: %s, City: %s\n", plist.current().name, plist.current().city);
         plist.move_next();
    }
    plist.clear();
 
 
  system("pause");
}
 
Текущее время: 22:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru