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

Связанный список. Почему nextPtr постоянно 0? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Шифрование. Не пойму откуда брать файлы http://www.cyberforum.ru/cpp-beginners/thread692709.html
#include "stdafx.h" #include "math.h" #include "conio.h" #include "stdio.h" int main() { char key = "qwerty"; FILE *input = fopen("file.txt", "rb"); FILE *output = fopen("out_.txt", "wb");
C++ Что значит использовать подстроку длинной не более 10 символов? Вот задача, не совсем пойму условие: Отсортировать строки в алфавитном порядке по убыванию. Для критерия упорядочивания использовать подстроку длиной не более 10 символов. Что значит использовать подстроку длинной не более 10 символов? http://www.cyberforum.ru/cpp-beginners/thread692708.html
С чего начать углубленное изучение? C++
Начал изучать С++, работаю в Microsoft Visual C++. Вопрос в том, что учебники начинают с изучения языка в консольной среде, а не с Windows Form Application, но с чего лучше начинать? Я ориентируюсь на Системное программирование, а не на Прикладное, но я как-то не заметил связи между консолью и Windows Form App. Поэтому не хочется начать с ненужной (для Системного, а не прикладного программиста)...
C++ База даных зеленых машин
Нужно сделать програму, где вводишь базу даных машин, и нужно вывести все машины зеленого цвета, вопрос в том, как записать в сменную стринг зеленый цвет, чтобы проверить через иф = если этот цвет соответствует зеленому. вот что-то набросал, а вот с цветом не могу. #include "stdafx.h" #include <iostream> #include <string> #include "conio.h" using namespace std;
C++ Как поделить на функции? http://www.cyberforum.ru/cpp-beginners/thread692697.html
Нужно поделить на части, всё равно как #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) { int mas ; int x, min, max, maxab=0, minab=0;
C++ Вывести самое длинное и самое короткое слово из строки Хочу сделать через strtok, но толком не знаю как именно. #include <iostream> #include <string.h> #include <conio.h> #include <stdio.h> using namespace std; void inp(char); void tok(char, int, int, int); int main() { подробнее

Показать сообщение отдельно
slipp1
12 / 11 / 1
Регистрация: 09.11.2012
Сообщений: 365
Записей в блоге: 1
09.11.2012, 02:13     Связанный список. Почему nextPtr постоянно 0?
динамический связный список
не пойму почему nextPtr( 0 ) постоянно равно 0!?
и при этом программа работает со списком добавляет, удаляет, выводит данные...

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
#define LISTNODE_H
 
// forward declaration of class List required to announce that class 
// List exists so it can be used in the friend declaration at line 13
template< typename NODETYPE > class List;                            
 
template< typename NODETYPE >
class ListNode 
{
   friend class List< NODETYPE >; // make List a friend
 
public:
   ListNode( const NODETYPE & ); // constructor
   NODETYPE getData() const; // return data in node
private:
   NODETYPE data; // data
   ListNode< NODETYPE > *nextPtr; // next node in list
}; // end class ListNode
 
// constructor
template< typename NODETYPE >
ListNode< NODETYPE >::ListNode( const NODETYPE &info )
   : data( info ), nextPtr( 0 ) 
{ 
   // empty body
} // end ListNode constructor
 
// return copy of data in node
template< typename NODETYPE >
NODETYPE ListNode< NODETYPE >::getData() const 
{ 
   return data; 
} // end function getData
 
#endif
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
#ifndef LIST_H
#define LIST_H
 
#include <iostream>
using std::cout;
 
#include "Listnode.h" // ListNode class definition
 
template< typename NODETYPE >
class List 
{
public:
   List(); // constructor
   ~List(); // destructor
   void insertAtFront( const NODETYPE & );
   void insertAtBack( const NODETYPE & );
   bool removeFromFront( NODETYPE & );
   bool removeFromBack( NODETYPE & );
   bool isEmpty() const;
   void print() const;
private:
   ListNode< NODETYPE > *firstPtr; // pointer to first node
   ListNode< NODETYPE > *lastPtr; // pointer to last node
 
   // utility function to allocate new node
   ListNode< NODETYPE > *getNewNode( const NODETYPE & );
}; // end class List
 
// default constructor
template< typename NODETYPE >
List< NODETYPE >::List() 
   : firstPtr( 0 ), lastPtr( 0 ) 
{ 
   // empty body
} // end List constructor
 
// destructor
template< typename NODETYPE >
List< NODETYPE >::~List()
{
   if ( !isEmpty() ) // List is not empty
   {    
      cout << "Destroying nodes ...\n";
 
      ListNode< NODETYPE > *currentPtr = firstPtr;
      ListNode< NODETYPE > *tempPtr;
 
      while ( currentPtr != 0 ) // delete remaining nodes
      {  
         tempPtr = currentPtr;
         cout << tempPtr->data << '\n';
         currentPtr = currentPtr->nextPtr;
         delete tempPtr;
      } // end while
   } // end if
 
   cout << "All nodes destroyed\n\n";
} // end List destructor
 
// insert node at front of list
template< typename NODETYPE >
void List< NODETYPE >::insertAtFront( const NODETYPE &value )
{
   ListNode< NODETYPE > *newPtr = getNewNode( value ); // new node
 
   if ( isEmpty() ) // List is empty
      firstPtr = lastPtr = newPtr; // new list has only one node
   else // List is not empty
   {
      newPtr->nextPtr = firstPtr; // point new node to previous 1st node
      firstPtr = newPtr; // aim firstPtr at new node
   } // end else
} // end function insertAtFront
 
// insert node at back of list
template< typename NODETYPE >
void List< NODETYPE >::insertAtBack( const NODETYPE &value )
{
   ListNode< NODETYPE > *newPtr = getNewNode( value ); // new node
 
   if ( isEmpty() ) // List is empty
      firstPtr = lastPtr = newPtr; // new list has only one node
   else // List is not empty
   {
      lastPtr->nextPtr = newPtr; // update previous last node
      lastPtr = newPtr; // new last node
   } // end else
} // end function insertAtBack
 
// delete node from front of list
template< typename NODETYPE >
bool List< NODETYPE >::removeFromFront( NODETYPE &value )
{
   if ( isEmpty() ) // List is empty
      return false; // delete unsuccessful
   else 
   {
      ListNode< NODETYPE > *tempPtr = firstPtr; // hold tempPtr to delete
 
      if ( firstPtr == lastPtr )
         firstPtr = lastPtr = 0; // no nodes remain after removal
      else
         firstPtr = firstPtr->nextPtr; // point to previous 2nd node
 
      value = tempPtr->data; // return data being removed
      delete tempPtr; // reclaim previous front node
      return true; // delete successful
   } // end else
} // end function removeFromFront
 
// delete node from back of list
template< typename NODETYPE >
bool List< NODETYPE >::removeFromBack( NODETYPE &value )
{
   if ( isEmpty() ) // List is empty
      return false; // delete unsuccessful
   else 
   {
      ListNode< NODETYPE > *tempPtr = lastPtr; // hold tempPtr to delete
 
      if ( firstPtr == lastPtr ) // List has one element
         firstPtr = lastPtr = 0; // no nodes remain after removal
      else 
      {
         ListNode< NODETYPE > *currentPtr = firstPtr;
 
         // locate second-to-last element            
         while ( currentPtr->nextPtr != lastPtr )    
            currentPtr = currentPtr->nextPtr; // move to next node
 
         lastPtr = currentPtr; // remove last node
         currentPtr->nextPtr = 0; // this is now the last node
      } // end else
 
      value = tempPtr->data; // return value from old last node
      delete tempPtr; // reclaim former last node
      return true; // delete successful
   } // end else
} // end function removeFromBack
 
// is List empty?
template< typename NODETYPE > 
bool List< NODETYPE >::isEmpty() const 
{ 
   return firstPtr == 0; 
} // end function isEmpty
 
// return pointer to newly allocated node
template< typename NODETYPE >
ListNode< NODETYPE > *List< NODETYPE >::getNewNode( 
   const NODETYPE &value )
{
   return new ListNode< NODETYPE >( value );
} // end function getNewNode
 
// display contents of List
template< typename NODETYPE >
void List< NODETYPE >::print() const
{
   if ( isEmpty() ) // List is empty
   {
      cout << "The list is empty\n\n";
      return;
   } // end if
 
   ListNode< NODETYPE > *currentPtr = firstPtr;
 
   cout << "The list is: ";
 
   while ( currentPtr != 0 ) // get element data
   {
      cout << currentPtr->data << ' ';
      currentPtr = currentPtr->nextPtr;
   } // end while
 
   cout << "\n\n";
} // end function print
Добавлено через 20 минут
тут не значение ту адрес? nextPtr для каждого обьекта класа listnode? по почему она устанавливается в 0 в конструкторе???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru