|
|
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
я создаю связной список , определяю 2 объекта , ввожу данные а когда распечатываю то 2й объект содержит данные первого. почему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 13:21 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Marik_1973я создаю связной список , определяю 2 объекта , ввожу данные а когда распечатываю то 2й объект содержит данные первого. почему ? Вы только что зарегистрировались? Тогда я напомню правила. В этом форуме принято вопрос дополнять фрагментом исходника. А то знаете-ли флейм получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 13:50 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
это связной список . какой кусок прог-мы прислать ? всю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 13:53 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Всю необязательно. Хотя-бы самодостаточный фрагмент начиная от создания списка и заканчивая распечатыванием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 14:08 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Set *Set::newelement(int num) //*** Set up new record { Set *element; // Address of new record element = new Set; // Create memory space for new record if (element != NULL) // Be sure memory can be allocated { element->number=num; // element->next = NULL; } else cout << "Not enough memory!" << endl; return element; } ///////////////////////////////////////////////////////////// void Set::add(int num) //*** Insert new record into list { Set *element; // Address of new record element = newelement(num); if (element != NULL) // New record created { Set *curr = head, // Record being examined for input *prev = NULL; // Record before curr while (curr != NULL // Not at end of list && element->number > curr->number) // number > record's { prev = curr; // Save current record address curr = curr->next; // Go to next record } element->next = curr; // Insert in front of current record if (prev == NULL) // No previous record head = element; // head in list else prev->next = element; // One before points to this } else cout << "Can't create new record." << endl; } /////////////////////////////////////////////////////////////////////////////////////////// int main(void) ///// Main Program { Set set1,set2; cout<<"set1:"<<endl; set1.add(1); set1.add(3); set1.print(); cout<<"set2:"<<endl; set2.add(0); set2.add(2); set2.add(5); set2.add(8); set2.print(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 14:12 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Сходу не вчитываясь в текст - вы увеены что new при недостатке памяти вернет NULL? это не malloc, new возвращать NULL _не_обязан_ (хотя может, зависит от компилятора и прагм), ему полагается выбрасывать exception если проблемы с памятью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 14:50 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
с одним объектом set1 все работает,set2 тоже работает но когда я вызываю set2.print() расспечатывается все числа с первого и второго объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 15:26 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
это сам класс : class Set ///// Set Class { private: int number; Set *next; Set *newelement(int num); //*** Set up new record public: Set(); void add(int num); //*** Insert new record into list void del(void); //*** Delete record from list bool isMember(int num); void print(void); //*** Print out list int size(void); }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 15:35 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
void Set::print(void) //*** Print out list { Set *element = head; // The head value of element is the head cout << setiosflags(ios::left); while (element != NULL) // The tail is not NULL { cout << setw(30) << element->number << setw(0)<< endl; element = element->next; // Set element to next address } } наверное проблема в глобальной переменной class Set; // Declare existence of class Set *head = NULL; // Declare and initialize global variable только как по другому ее объявить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 16:18 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
ты хочешь сказать что head у тебя статическая переменная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 16:49 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
head - глобальная переменная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2005, 17:15 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
А чем list не угодил? #include <list> list<Element*> MyWorkedLinkedList; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2005, 21:08 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Marik_1973head - глобальная переменная Так в этом-то и вся проблема... Для упрощения ее решения можно внести указатель на первый элемент внутрь структуры/класса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 12:06 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
ПРодолжаю недоумевать. Настаиваю категорически на использовании list из STL! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 13:57 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
niknameПРодолжаю недоумевать. Настаиваю категорически на использовании list из STL! :) Да, а вдруг человек курсовую пишет по связным спискам? Так же он никогда не узнает, что такое связные списки ( ) и с чем их едят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 14:14 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
За эту реализацию я бы поставил 2. Объясняю - нет метода для нахождения головы. МОжно просто потеряться. Легко спутать указатели на два разных списка и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 14:26 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Ну если в вас так сильны привыки использования malloc/free или аля паскаль, тогда так можно писать Код: plaintext Но даже если смотреть дальше - очень неверно с вашей стороны в случае неудачи сборки класса - просто выводить что-то на печать, и рабдотать как не в чем не бывало. Это усложняет код, делает головоломной отладку и усложняет сопровождение программы. Используйте в таких случаях исключение. Во-вторых: использование глобальных переменных не очень правильно. Гораздо проще было объявить некий тип Список, а в нем внутри класс Node или Item. Пользуйтесь возможностями языка: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ну там много еще гадостей. Чичаз домой поеду -там допишу 8-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 17:10 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
книжка на эту тему есть хорошая. http://books.dore.ru/bs/f1bid1179.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 18:04 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Вобчем то да че рассказывать лучше показать. Как-то я упражнялся с этим делом и сохранил как раз для таких случаев. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 20:05 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
все это можно переписать ЗНАЧИТЕЛЬНО оптимальней и в итераторном стиле. Там просто пара фокусов с быстрым удалением и удалением "хвоста" без использования "головы". Кстати, распространенная задачка при приеме на работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 20:11 |
|
||
|
Cвязной список
|
|||
|---|---|---|---|
|
#18+
Забыл предупредить - не советую использовать этот код при отправке тестов и прочего, потому как когда я отправлял свои тесты мне было сделано замечание о неаккуратности кода и безобразном стиле оформления. так что вы просто повторите мои ошибки. код привожу только для ознакомления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 20:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32971279&tid=2033590]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
100ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 453ms |

| 0 / 0 |
