Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Список! Односвязный... есть что-то непонятное... / 11 сообщений из 11, страница 1 из 1
16.08.2005, 15:04
    #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
16.08.2005, 15:38
    #33218360
Andrey_Ohotin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
..... просто пока я с этим не разберусь, дальше не смогу эксперементировать.. а хочется.. блин.. целый день пытался понять, где ошибка.. так ничего и не нашел.. ((
...
Рейтинг: 0 / 0
16.08.2005, 15:46
    #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
16.08.2005, 16:45
    #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
16.08.2005, 16:45
    #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
16.08.2005, 16:46
    #33218681
mrDOS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
Хехе синхронна запостили :)
...
Рейтинг: 0 / 0
17.08.2005, 08:54
    #33219511
Andrey_Ohotin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
СПАСИБО!!!!! разобрался... )))
...
Рейтинг: 0 / 0
17.08.2005, 15:18
    #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
24.08.2005, 17:36
    #33232505
Им9I поль3oвaтeля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
И зачем этим страдать?
не проще использовать std::list?
...
Рейтинг: 0 / 0
24.08.2005, 17:39
    #33232520
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
Хотя-бы затем, что std::list НЕ ОДНОСВЯЗНЫЙ список. И насколько мне известно, в стандарте односвязного списка нет.
...
Рейтинг: 0 / 0
25.08.2005, 10:41
    #33233374
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список! Односвязный... есть что-то непонятное...
Им9I поль3oвaтeляИ зачем этим страдать?
не проще использовать std::list?

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


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