powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Список! Односвязный... есть что-то непонятное...
11 сообщений из 11, страница 1 из 1
Список! Односвязный... есть что-то непонятное...
    #33218223
Andrey_Ohotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем еще раз привет! Вот.. есть такая прога.. просто решил списочек изучить.. что это есть такое.. вот написал кое-что, а выдает не понять что.. не цифры, а какие-то странные значения.. у меня и раньше такое встречалось, но тут я просто и не знаю даже где ошибка!!! помогите плиз.. что тут не так?

Код: 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.
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "windows.h"

struct List
{
	int value;
	List* Next;
};

List* New_Base();
List* Add(List* ptr, List &ob);
void Print(List* ptr);

int main()
{
	List* ptr;                  //Объявили указатель типа список
	ptr = New_Base();           //Сформировали начальный список
    Print(ptr);                 //Выводим на экран начальный список

	getch();
	return  0 ;
}

List* Add(List* ptr, List &ob) //Принимаем указатель на начало списка и то, что добавляем
{
	List* New = new List;            //Создаем новый объект
	New->Next =  0 ;                   //Он указывает на следующий, который указывает на NULL

	if(ptr)                          //Если список не пуст, то добавляем в конец списка
	{
		List* temp = ptr;
		while(temp->Next)
			temp = temp->Next;       //Ищем конец списка
		temp->Next = New;            //Привязываем новый эелемент к концу списка
	}
	else  
		ptr = New;                    //А если пуст, то новый элемент ставим в начало списка
	return ptr;                       //Возвращаем указатель на начало списка
}

List* New_Base()
{
	List ob;	
	List* ptr =  0 ;
	for(int i= 0 ;i< 5 ;i++)
	{
		ob.value = (i+ 1 );
		ptr = Add(ptr,ob);
	}
	return ptr;
}

void Print(List* ptr)
{
	List* pv = ptr;
	while(pv)
	{
		printf("%d ",ptr->value);
		pv = pv->Next;		
	}
}
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33218360
Andrey_Ohotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
..... просто пока я с этим не разберусь, дальше не смогу эксперементировать.. а хочется.. блин.. целый день пытался понять, где ошибка.. так ничего и не нашел.. ((
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33218388
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, разбираться некогда. Вот посмотри в качестве примера:

Код: 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.
...
struct node
{
     int value;
     node *next;
     node() : value( 0 ), next( 0 ) {}
     ~node()
     {
           delete next;
     }
};

struct list
{
     node* head;
     node* tail;
     list() : head( 0 ), tail( 0 ) {}
     ~list()
     {
           delete head;
           head = tail =  0 ;
     }
     list& add(int value)
     {
           if(head ==  0 ) 
           {
                tail = head = new node;
           }  else
           {    
               tail->next = new node;
               tail = tail->next;
           }
           tail->next =  0 ; 
           tail->value = value;
           return *this;
     }

     void print() const
     {
          node const *cur = head;
          while( cur !=  0 )
          {
                std::cout << cur->value;
                cur = cur->next;
          }   
     } 
private:
     list(list const &);
     list& operator=(list const &);
};

...
list lst;
lst.add( 100 );
lst.add( 200 );
lst.print();

Удачи!
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33218671
mrDOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забываеш заносить значение в value
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
List* Add(List* ptr, List &ob)
{
List* New = new List;            
New->Next =  0 ;                
New->value = ob.value; //вот ентого у тебя нет
if(ptr)                         
{
List* temp = ptr;
while(temp->Next)
temp = temp->Next;       
temp->Next = New;           
}
else  
ptr = New;                   
return ptr;                     
}
и исчо очипятка ф печати (печатаеш один и тот же узел)
Код: plaintext
1.
2.
3.
4.
5.
List* pv = ptr;
while(pv)
{
printf("%d ",ptr->value); //нада pv->value
pv = pv->Next;
}
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33218673
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чтобы работал твой код, смотри, здесь много неточностей:

Код: 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.
struct List
{
	int value;
	List* Next;
};

List* New_Base();
// List* Add(List* ptr, List &ob); - зачем такая сигнатура?
List* Add(List* ptr, int val);
void Print(List* ptr);

int main()
{
	List* ptr;                  
	ptr = New_Base();      
             Print(ptr);                 

             // а удалять кто будет? 

	getch();
	return  0 ;
}

// List* Add(List* ptr, List &ob) - изменили сигнатуру
List* Add(List* ptr, int value) 
{
	List* New = new List;            
	New->Next =  0 ;                   
            // а присвоить value забыли?
            New->value = value; 

	if(ptr) 
	{
		List* temp = ptr;
		while(temp->Next)
			temp = temp->Next;       
		temp->Next = New;            
	}
	else  
		ptr = New;                    

	return ptr;                       
}

List* New_Base()
{
//             List ob; - зачем?
	List* ptr =  0 ;
	for(int i= 0 ;i< 5 ;i++)
	{
//		ptr = Add(ptr, ob);
		ptr = Add(ptr, i);
	}
	return ptr;
}

void Print(List* ptr)
{
	List* pv = ptr;
	while(pv)
	{
//		printf("%d ",ptr->value); // здесь явная опечатка
		printf("%d ",pv->value); 
		pv = pv->Next;		
	}
}
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33218681
mrDOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хехе синхронна запостили :)
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33219511
Andrey_Ohotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО!!!!! разобрался... )))
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33220873
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот, почти все решили. Осталось только добавить функцию для освождения зааллоченной памяти.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void DeleteList(List* ptr)
{
  List* pv;
  while(ptr)
  {
    pv = ptr->Next;
    delete ptr; 
    ptr = pv;
  }
}
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33232505
Им9I поль3oвaтeля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И зачем этим страдать?
не проще использовать std::list?
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33232520
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя-бы затем, что std::list НЕ ОДНОСВЯЗНЫЙ список. И насколько мне известно, в стандарте односвязного списка нет.
...
Рейтинг: 0 / 0
Список! Односвязный... есть что-то непонятное...
    #33233374
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Им9I поль3oвaтeляИ зачем этим страдать?
не проще использовать std::list?

Не написав ни разу свой список, никогда не сможешь эффективно работать с std::list.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Список! Односвязный... есть что-то непонятное...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]