С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
numin
0 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 1
#1

запутался со списком - C++

04.05.2013, 23:08. Просмотров 275. Ответов 1
Метки нет (Все метки)

Всем доброго времени суток! Помогите пожалуйста разобраться, я сделал класс spisok , в нем несколько нужных мне структур и методов, покторые позваоляет работать со списком(там где ключ, значение, не помню точно как он называется). struct list *l = p.new_list(); ошибку мне компилятор выдает в этой строчке (здесь она номер 122), говоря что я не могу такое значение использовать для инициализации сущности. Заранее благодарю за любую оказанную помощь, ниже привожу текст программы :


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
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef int mkey_t;  // Тип ключа
typedef int value_t; // Тип значения
class spisok
{
public:
struct li {
   mkey_t key;
   value_t value;
   struct li* next;
};
 
struct list {
   struct li *first;
   int size;
};
 
struct list *new_list() {
   struct list *res = (struct list*) malloc(sizeof(struct list));
   res->first = NULL;
   res->size = 0;
   return res;
}
 
struct li* new_list_item(void) {
    struct li *res = (struct li*) malloc(sizeof(struct li));
    res->next = 0;
    return res;
}
 
void delete_items(struct li* it) {
   if ( it ) {
      if ( it->next ) {
         delete_items(it->next);
      }
      free( it );
   }
}
 
void delete_list(struct list *l) {
   if ( l ) {
      delete_items( l->first );
      free ( l ); 
   }
}
 
int insert_item( struct list *l, mkey_t key, value_t value ) {
   struct li *it = new_list_item();
   if ( it == NULL ) return 0;
   it->key = key;
   it->value = value;
   it->next = l->first;
   l->first = it;
   l->size++;
   return 1;
}
 
int insert_item_uniq( struct list *l, mkey_t key, value_t value ) {
   if ( l ) {
      struct li *it;
      for ( it = l->first; it != NULL; it = it->next ) {
         if (it->key == key) {
            it->value = value;
            return 1;
         }
      }
      return insert_item(l, key, value);
   
   } else {
      return 0;
   }
}
 
int delete_item( struct list *l, mkey_t key ) {
   struct li *it, *prev_it = 0;
   for (  it = l->first; it != NULL; prev_it = it, it = it->next ) {
      if ( it->key == key ) {
         if ( prev_it != 0 ) 
            prev_it->next = it->next;
         else
            l->first = it->next;
         free( it );
         l->size--;
         return 1;
      }
   }
   return 0;
}
 
void print_list ( struct list *l ) {
   struct li *it;
   printf( "Size=%d\n", l->size );
   for ( it = l->first; it != NULL; it = it->next ) {
      printf("(%d,%d) -> ", it->key, it->value);   
   }
   printf( "NULL\n" );
}
 
int find_item( struct list *l, mkey_t key, value_t *value) {
   struct li *it;
   for ( it = l->first; it != NULL; it = it->next ) {
      if ( it->key == key ) {
         *value = it->value;
         return 1;
      }
   }
   return 0;
}
};
 
void main()
{
    spisok  p;
    
   char cmd[1024];
   
   struct list *l = p.new_list();          //проблема в этой строчке
 
      fgets( cmd, sizeof(cmd), stdin );
      if ( strncmp( cmd, "ADD", 3 ) == 0 ) {
         mkey_t key;
         value_t value;
         if( sscanf(cmd + 3, "%d%d", &key, &value) == 2 ) {
            p.insert_item_uniq(l, key, value );
         } else {
            printf("Bad arguments: %s\n", cmd+3);
            printf("Usage: ADD <key> <value>\n");
         }
      } else if ( strncmp( cmd, "DEL", 3 ) == 0 ) {
         mkey_t key;
         sscanf(cmd + 3, "%d", &key );
         p.delete_item( l, key );
      } else if ( strncmp( cmd, "PRINT", 5) == 0 ) {
         p.print_list( l );
      } else if ( strncmp( cmd, "FIND", 4) == 0 ) {
         mkey_t key;
         value_t value;
         sscanf( cmd + 4, "%d", &key );
         if ( p.find_item( l, key, &value ) ) {
            printf("Value = %d\n", value);   
         } else {
            printf("Not found\n");
         }
      }
   }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос запутался со списком (C++):

Как реализовать работу со списком строк и списком цифр в классе List? - C++
Добрый день! Проблема такая Есть класс-список: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace...

Нужны задачки для упражнения в работе со списком, стеком, очередью и двусвязным списком - C++
Недавно научился строить список, стек, очередь, двусвязный список в С++, что бы закрепить навыки мне нужны задачки. Можете подсказать, где...

В чем разница между простым линейным списком, и динамическим линейным списком? - C++
вопрос в теме

Запутался в скобках - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { float b; int n,s=0,k=0; ...

Массив(запутался) - C++
Знаю правила, прошу помощи. &quot; Пример массива и дополнительных переменных приведены ниже: { 1.2, -1.8, -4.5, 8.5, -0.1, -0.9, 9.7,...

Запутался в ссылках - C++
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают. #include &lt;iostream&gt; #include...

1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.05.2013, 23:42 #2
numin, исправьте так:
C++
1
   struct spisok::list *l = p.new_list();
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2013, 23:42
Привет! Вот еще темы с ответами:

Запутался в Рекурсии - C++
int f(unsigned no, unsigned div) { if (!no) return div; if (!div) div=1; if (no % 2) return div + f(no/div,...

Запутался в типах - C++
Как правильно указать типы для вывода нормального, верного ответа? Как правильно задерживать консоль? #include &lt;iostream&gt; #include...

Со стеком запутался - C++
Как сделать чтоб это заработало Компилирую на CodeBlocks (если есть лучше предлагайте) #include &lt;iostream&gt; #include &lt;string.h&gt; ...

Запутался с итераторами - C++
Привет. Никак не могу понять почему ошибка? std::string s = &quot;sEReGA&quot;; for (std::string::iterator i = s.begin(); i != s.end();...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.