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

C++ Наследование динамического списка классом стеком. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
iWord
 Аватар для iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
03.10.2011, 05:44     C++ Наследование динамического списка классом стеком. #1
Салют форумчане. Новый курс, новые приключения. Вот и дали задание наследую динамический список создать стек. Список вроде сделал , да стек не пойму как к нему прикрутить. (Какие только велосипеды не придумают для лабораторных работ)

List.h
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
#ifndef LIST_H
#define LIST_H
#include <iostream>
using std::cout;
#include <new>
#include "ListNode.h" 
template< typename NODETYPE >
class List 
{
public:
   List(); 
   ~List(); 
   void insertAtFront( const NODETYPE & );
   int insertAtBack( const NODETYPE & );
   bool removeFromFront( NODETYPE & );
   bool removeFromBack( NODETYPE & );
   bool isEmpty() const;
   void print() const;
private:
   ListNode< NODETYPE > *firstPtr;
   ListNode< NODETYPE > *lastPtr; 
   ListNode< NODETYPE > *getNewNode( const NODETYPE & );
}; 
 
template< typename NODETYPE >
List< NODETYPE >::List() 
   : firstPtr( 0 ), lastPtr( 0 ) 
{ 
    cout << "Конструктор инциализации начал работу";
    cout << "Все начальные данные инициализированы";
}
 
template< typename NODETYPE >
List< NODETYPE >::~List()
{
   if ( !isEmpty() ) 
   {    
      cout << "Удаление элементов\n";
      ListNode< NODETYPE > *currentPtr = firstPtr;
      ListNode< NODETYPE > *tempPtr;
      while ( currentPtr != 0 ) 
      {  
         tempPtr = currentPtr;
         cout << tempPtr->data << '\n';
         currentPtr = currentPtr->nextPtr;
         delete tempPtr;
      } 
   } 
   cout << "Все элементы удалены\n\n";
} 
 
template< typename NODETYPE >
void List< NODETYPE >::insertAtFront( const NODETYPE &value )
{
   ListNode< NODETYPE > *newPtr = getNewNode( value );
   if ( isEmpty() ) 
      firstPtr = lastPtr = newPtr; 
   else 
   {
      newPtr->nextPtr = firstPtr; 
      firstPtr = newPtr; 
   } 
} 
 
template< typename NODETYPE >
int List< NODETYPE >::insertAtBack( const NODETYPE &value )
{
   ListNode< NODETYPE > *newPtr = getNewNode( value );
   if ( isEmpty() ) 
      firstPtr = lastPtr = newPtr;
   else 
   {
      lastPtr->nextPtr = newPtr; 
      lastPtr = newPtr;
   }
} 
 
template< typename NODETYPE >
bool List< NODETYPE >::removeFromFront( NODETYPE &value )
{
   if ( isEmpty() ) 
      return false;
   else 
   {
      ListNode< NODETYPE > *tempPtr = firstPtr; 
      if ( firstPtr == lastPtr )
         firstPtr = lastPtr = 0;
      else
         firstPtr = firstPtr->nextPtr; 
      value = tempPtr->data; 
      delete tempPtr; 
      return true; 
   } 
} 
 
template< typename NODETYPE >
bool List< NODETYPE >::removeFromBack( NODETYPE &value )
{
   if ( isEmpty() ) 
      return false;
   else 
   {
      ListNode< NODETYPE > *tempPtr = lastPtr; 
      if ( firstPtr == lastPtr )
         firstPtr = lastPtr = 0; 
      else 
      {
         ListNode< NODETYPE > *currentPtr = firstPtr;
          
         while ( currentPtr->nextPtr != lastPtr )    
            currentPtr = currentPtr->nextPtr;
         lastPtr = currentPtr;
         currentPtr->nextPtr = 0; 
      } 
      value = tempPtr->data; 
      delete tempPtr;
      return true; 
   } 
} 
template< typename NODETYPE > 
bool List< NODETYPE >::isEmpty() const 
{ 
   return firstPtr == 0; 
} 
 
template< typename NODETYPE >
ListNode< NODETYPE > *List< NODETYPE >::getNewNode( 
   const NODETYPE &value )
{
   return new ListNode< NODETYPE >( value );
}
 
template< typename NODETYPE >
void List< NODETYPE >::print() const
{
   if ( isEmpty() ) 
   {
      cout << "Список пуст\n\n";
      return;
   } 
   ListNode< NODETYPE > *currentPtr = firstPtr;
 
   while ( currentPtr != 0 ) 
   {
      cout << currentPtr->data << ' ';
      currentPtr = currentPtr->nextPtr;
   }
   cout << "\n\n";
} 
#endif
ListNode.h
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
#ifndef LISTNODE_H
#define LISTNODE_H
template< typename NODETYPE > class List;                            
template< typename NODETYPE >
class ListNode 
{
   friend class List< NODETYPE >; 
public:
   ListNode( const NODETYPE & );
   NODETYPE getData() const; 
private:
   NODETYPE data; 
   ListNode< NODETYPE > *nextPtr; 
}; 
 
template< typename NODETYPE >
ListNode< NODETYPE >::ListNode( const NODETYPE &info )
   : data( info ), nextPtr( 0 ) 
{ 
 
} 
 
template< typename NODETYPE >
NODETYPE ListNode< NODETYPE >::getData() const 
{ 
   return data; 
}
#endif
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iWord
 Аватар для iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
03.10.2011, 05:45  [ТС]     C++ Наследование динамического списка классом стеком. #2
Вот еще и файлики
Вложения
Тип файла: rar LabWork_4.rar (16.7 Кб, 22 просмотров)
LosAngeles
Заблокирован
03.10.2011, 06:31     C++ Наследование динамического списка классом стеком. #3
лист недоделан, поэтому и непонятно как стек к этому прикрутить. Стек обычно делается через паттерн адаптер
C++
1
2
3
4
5
6
7
8
template <typename T, typename CONT = std::deque<T>>  class stack
{
  CONT c;
public :
  void push(T const&);
  void pop();
  T top() const;
}
что по сути является композицией, то есть можно замутить приватное наследование(только в рамках лабы, так то приватное наследование не является заменой композиции)

C++
1
2
3
4
template <typename T> class stack : private list
{
 ...
}
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.10.2011, 10:42     C++ Наследование динамического списка классом стеком. #4
Цитата Сообщение от iWord Посмотреть сообщение
Салют форумчане. Новый курс, новые приключения. Вот и дали задание наследую динамический список создать стек. Список вроде сделал , да стек не пойму как к нему прикрутить. (Какие только велосипеды не придумают для лабораторных работ)
F как еще новичков учить? Только на велосипедах, подводные камни которых известны вдоль и поперек...
Откройте мою книжку - и будет вам счастье...
У меня там этих стеков разных - штук 6...
iWord
 Аватар для iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
03.10.2011, 12:12  [ТС]     C++ Наследование динамического списка классом стеком. #5
Откройте мою книжку - и будет вам счастье...
ссылочку если можно?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.10.2011, 14:29     C++ Наследование динамического списка классом стеком. #6
http://www.ozon.ru/context/detail/id/3515464/
В сети болтается дежавюшный файл - вполне хорошего качества. Поищите.
silent_1991
03.10.2011, 16:06
  #7

Не по теме:

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
F как еще новичков учить?
Только не просить наследовать куб от квадрата... По мне, так наследование стека от списка не лучше.

ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
04.10.2011, 09:32     C++ Наследование динамического списка классом стеком. #8
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


Только не просить наследовать куб от квадрата... По мне, так наследование стека от списка не лучше.

Много разных способов я привожу. Можно использовать композицию. Можно параметризовать шаблон параметром-списком (как, собственно, и сделано в STL).
Можно использовать закрытое наследование от списка (для специализации исходного класса).
А можно просто написать стек в виде односвязного списка со вставкой только в голову (ИМХО, самый простой и хороший вариант).
В общем, зависит от задачи и потребностей, а способов С++ дает много.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.10.2011, 12:34     C++ Наследование динамического списка классом стеком. #9
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Можно параметризовать шаблон параметром-списком
Параметризовать шаблон можно как для наследования, так и для композиции, так что отдельным способом это не назвать.) Только если двумя способами.)

Добавлено через 56 секунд
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А можно просто написать стек в виде односвязного списка со вставкой только в голову (ИМХО, самый простой и хороший вариант)
Я голосую за вектор с пуш/поп_бэком.

Добавлено через 39 секунд
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Можно использовать закрытое наследование от списка (для специализации исходного класса).
Наследование реализации не есть специализация. Тоже ИМХО.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.10.2011, 12:38     C++ Наследование динамического списка классом стеком. #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я голосую за вектор с пуш/поп_бэком
list и deque будут эффективнее, так как нам нужен не произвольный доступ, а быстрая вставка/быстрое удаление с одного конца списка.
И да, наследование, ИМХО, тут совсем не в тему.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.10.2011, 12:42     C++ Наследование динамического списка классом стеком. #11
Цитата Сообщение от Nameless One Посмотреть сообщение
list и deque будут эффективнее
В зависимости от частоты этих вставок/удалений вектор может оказаться эффективнее. Выделений памяти не будет лишних.) Или он сольёт списку. Как повезёт.)
iWord
 Аватар для iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
08.10.2011, 05:51  [ТС]     C++ Наследование динамического списка классом стеком. #12
Салют. Решил снова перепилить. Вроде односвязный список организовал, но вдруг приспичило двусвязный сделать. Прошу подскажите с какой стороны зайти.

List.cpp
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
/* 
 * File:   List.cpp
 * Author: iWord
 * 
 */
 
#include "List.h"
#include <locale>
#include <stdio.h>
#include <stdlib.h>
 
List::List() {
    setlocale(LC_ALL, "");
    printf("\033[44m \033[37m \033[1m Конструктор по умолчанию начал работу \033[m \033[m \033[m \n");
 
    list *tmp;
    tmp = new list;
 
    tmp -> info = 0;
    tmp -> next = NULL;
    start = tmp;
 
    printf("\033[44m \033[37m \033[1m Конструктор по умолчанию закончил работу \033[m \033[m \033[m \n");
}
 
List::List(int count, int method) {
 
    int item, item_1;
    char buffer[200];
 
    printf("\033[44m \033[37m \033[1m Конструктор с параметрами начал работу \033[m \033[m \033[m \n");
 
    list *tmp1, *tmp2;
    tmp1 = new list;
 
    tmp1 -> info = 0;
    tmp1 -> next = NULL;
    start = tmp1;
 
    time_t time_var;
    time_var = time(NULL);
    srandom(time(NULL));
 
    for (int i = 0; i < count; i++) {
        if (!method) {
            printf(" \033[36m \033[1m Введите элемент очереди \033[m \033[m \n");
            fgets(buffer, 120, stdin);
            item = atoi(buffer);
        } else {
            item = rand() % 101;
            item_1 = item;
            for (int i = 0; i < item_1; i++) {
                item = item * (-1);
            }
        }
        tmp1 = start;
        while (tmp1 -> next != NULL)
            tmp1 = tmp1 -> next;
        tmp2 = (list*) malloc(sizeof (list));
        tmp2 -> info = item;
        tmp2 -> next = NULL;
        tmp1 -> next = tmp2;       
        start -> info++;
    }
printf("\033[44m \033[37m \033[1m Конструктор с параметрами завершил работу \033[m \033[m \033[m \n");
}
 
List::~List() {
    printf("\033[44m \033[37m \033[1m Деструктор начал работу \033[m \033[m \033[m \n");
    
    while (!Empty()) {
        Delete(start -> info);
    }
        printf(" \033[31m \033[1m Память освобождена \033[m \033[m \n");
        printf("\033[44m \033[37m \033[1m Деструктор завершил работу \033[m \033[m \033[m \n");
}
 
int List::Empty(){
    if (start -> info) {
        return 0;
    }else{
        return 1;
    }
}
 
void List::Append(int item){
    list *tmp1,*tmp2;
    tmp1 = start;
    while (tmp1 -> next != NULL)
        tmp1 = tmp1 -> next;
    tmp2 = (list*)malloc(sizeof(list));
    tmp2 -> info = item;
    tmp2 -> next = NULL;
    tmp1 -> next = tmp2;
    start ->info++;
}
 
void List::Delete(int item){
    list *tmp1,*tmp2;
    tmp2 = start;
    for (int i = 1; i < item; i++)
      tmp2 = tmp2 -> next;
    tmp1 = tmp2 -> next;
    tmp2 -> next = tmp1 -> next;
    free(tmp1);
    start -> info--;
}
 
void List::Print(){
    list *tmp;
    if (!start -> info) {
        printf(" \033[36m \033[1m Очередь пуста \033[m \033[m \n");
    }else{
        tmp = start;
        tmp = tmp -> next;
        while (tmp != NULL) {
            printf("\033[36m \033[1m %d \033[m \033[m",tmp -> info);
            tmp = tmp -> next;
        }
    }
}
 
int List::Value(int number){
    list *tmp;
    tmp = start;
    for (int i = 0; i < number; i++)
        tmp = tmp -> next;
    return tmp -> info;
}
 
void List::Insert(int position,int item){
    list *tmp,*tmp1,*tmp2;
    tmp = addres(position - 1);
    tmp1 = tmp -> next;
    tmp2 = (list*)malloc(sizeof(list));
    tmp2 -> info = item;
    tmp -> next = tmp2;
    tmp2 -> next = tmp1;
    start -> info++;
}
List.h
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
/* 
 * File:   List.h
 * Author: iWord
 *
 */
 
#ifndef LIST_H
#define LIST_H
 
struct list{
    int info;
    struct list *next;
    struct list *prev;
};
 
class List {
protected:
    struct list *start;
    int buffer;
public:
    
    /**
     * @constructor     Конструктор по умолчанию
     */
    
    List();
    
    /**
     * @constructor     Конструктор с параметрами
     * @param count     Количество элементов
     * @param method    Метод заполнения
     */
    
    List(int count, int method);
    
    /**
     * @destructor      Деструктор
     */
    
    virtual ~List();
    
    /**
     * @method          Проверка на заполненность списка
     */
    
    int Empty();
    
    /**
     * @method          Добавление в конец списка
     */
    
    void Append(int item);
    
    /**
     * @method          Удаление элемента
     */
    
    void Delete(int item);
    
    /**
     * @method          Печать списка
     */
    
    void Print();
    
    /**
     * @method          Возвращение значения элемента списка
     * @return          Значение элемента
     */
    
    int Value(int number);
    
    /**
     * @method          Вставка элемента списка
     */
    
    void Insert(int position,int item);
    
    /**
     * 
     * @method Печать отрезка  
     */
    
    void Negative_pos();
    
    list *addres(int number){
        list *tmp;
        tmp = start;
        for (int i = 0; i < number; i++)
            tmp = tmp -> next;
        return tmp;
    };
 
};
 
#endif  /* LIST_H */
main.cpp
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
/* 
 * File:   main.cpp
 * Author: iWord
 *
 */
 
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <locale>
#include "List.h"
#include <malloc.h>
#include <time.h>
#include <string.h>
 
int main(int argc, char** argv) {
    
    setlocale(LC_ALL,"");
    
    int count,method,i,methodx;
    int params[10];
    
    char buffer[500];
    char temp[500];
    char text[10][500];
    char *slovar[] = {"count","method","zadanie","author"};
    
    FILE *config,*log;
    time_t times;
    
    if((log = fopen("lab1.log","a")) == NULL){
        printf("\033[31m Ошибка открытия файла логирования!\033[m \n");
        printf("\033[1m Нажмите Enter. \033[m \n");
        getchar();
        
        if((log = fopen("lab1.log","wt")) == NULL){
            printf("\033[31m Ошибка открытия файла логирования!\033[m \n");
            printf("\033[1m Нажмите Enter. \033[m");
            getchar();
            exit(0);
        }else{
            printf("\033[1m Файл протокола открыт успешно. \033[m \n");
        }
    }else{
         printf("\033[1m Файл протокола открыт на добавление данных. \033[m \n");
    }
    
    times = time(NULL);
    fprintf(log,"\n%s : запуск программы \n",ctime(&times));
    
    if((config=fopen("configure.config","r")) == NULL){
        times = time(NULL);
        fprintf(log,"%s : ошибка открытия конфигурационного файла! \n",ctime(&times));
        printf("\033[31m \033[1m Ошибка открытия конфигурационного файла! \033[m \033[m \n");
        getchar();
        exit(0);
    }
    
fgets(temp,5,config);
    if (strlen(temp)==5)
        {
 
        if (strstr(temp,"Laba1")==0) 
        {
        fprintf(log,"Не верный конфигурационный файл!\n");
        puts("Не верный конфигурационный файл!");
        printf(" ERROR = %s\n", temp);
        getchar();
        }
        }
 printf("Конфигурационный файл верен.\n");
 
 rewind(config);
 fgets(buffer,200,config);
 i = 0;
 while (!feof(config)){
     fgets(buffer,300,config);
     if(buffer[0]!='#'){
         for (int i = 0; i < 4; i++) {
             if(strstr(buffer,slovar[i]) != NULL){
                 strcpy(text[i],strchr(buffer,'='));
             }
            }
     }
    }
 
 for (int i = 1; i < strlen(text[0]); i++) 
     buffer[i-1] = text[0][i];
 params[1] = atoi(buffer);
 
 for (int i = 1; i < strlen(text[1]); i++) 
     buffer[i-1] = text[1][i];
 params[2] = atoi(buffer);
 
 for(i=1;i<=strlen(text[2]);i++)
     buffer[i-1]=text[2][i];
    
 for (i=0;i<=strlen(buffer);i++) 
    text[2][i]=buffer[i];
 
  for(i=1;i<=strlen(text[3]);i++)
     buffer[i-1]=text[3][i];
    
 for (i=0;i<=strlen(buffer);i++) 
    text[3][i]=buffer[i];
 
 count = params[1];
 method = params[2];
 
 printf("\n \033[36m \033[1m Лабораторная работа №1 \n \033[m");
 printf("\033[1mЗадание: %s \033[m ",text[2]);
 fprintf(log,"%s :%s",ctime(&times),text[2]);
 printf("\033[1mВыполнил: %s \033[m ",text[3]);
 fprintf(log,"%s :выполнил %s",ctime(&times),text[3]);
 printf("\n\033[36m\033[1m____________________________________________________ \n\033[m");
 printf("Количество элементов в списке: %d",count);
 fprintf(log,"%s :количество элементов в списке - %d",ctime(&times),count);
 
 if(method != 0){
     puts("\nВыбран автоматический режим.");
     fprintf(log,"%s :выбран автоматический режим.",ctime(&times));
     methodx = 1;
 }else{
     puts("\nВыбран ручной режим.");
     fprintf(log,"%s :выбран ручной режим.",ctime(&times));
     methodx = 0;
 }
 
 if(count <0 || count > 20){
     printf("\033[31m\033[1mВы указали слишком большое количество элементов очереди: %d.\nИнтервал значений от 0 < x < 20. По умолчанию будет устаовлено значение 5.\033[m",count);
     fprintf(log,"%s :Вы указали слишком большое количество элементов очереди: %d.\nИнтервал значений от 0 < x < 20. По умолчанию будет устаовлено значение 5",ctime(&times),count);
 }
 
 List mylist(count,method);
 mylist.Insert(2,10);
 mylist.Print();
 
 
 
 
    
 
 
 
    printf("\n____________________________________________________ \n \033[1m Работа программы успешно завершена \033[m \n");
    getchar();
    return 0;
}
configure.config
C++
1
2
3
4
5
6
7
8
9
Laba1
#Количество элементов очереди n>0&n<20
count=10
#Способ заполнения 0-ручное заполнение, другое значение - автозаполнение
method=1
#Формулировка задания
zadanie=В списке целых чисел подсчитать кол-во переменных знаков. Вывести между какими элементами
#Автор
author=Мухамедгалиев Ринат ИВТ-21
Вложения
Тип файла: rar Laba1.rar (38.8 Кб, 8 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 14:01     C++ Наследование динамического списка классом стеком.
Еще ссылки по теме:

C++ Сортировка динамического линейного списка
Удаление элемента из односвязного списка, представленного классом C++
C++ Не работает метод сортировки односвязного списка, оформленного классом(узел - структура)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
iWord
 Аватар для iWord
10 / 10 / 1
Регистрация: 21.12.2010
Сообщений: 109
08.10.2011, 14:01  [ТС]     C++ Наследование динамического списка классом стеком. #13
Черт, второй день маюсь никак не пойму как сделать.
Yandex
Объявления
08.10.2011, 14:01     C++ Наследование динамического списка классом стеком.
Ответ Создать тему
Опции темы

Текущее время: 23:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru