Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2008, 03:30   #1
Vasek
Новичок
Джуниор
 
Регистрация: 16.11.2007
Сообщений: 2
По умолчанию Линейный однозвязаный список, помогите плиз с задачкой

Задача: нужно реализовать линейный однозвязаный список на visual С++ 6.0 через классы. Вводимые даные должны быть целочислеными
Задача сама по себе простая но препод "просит" решеить её слегка "нестандартным" метом !!!!!!
Вот код в котром этот метод я пытаюсь реализовать, сдесь описаны функции ввода и вывода элементов списка.

Код:

Код:
#include "stdafx.h"
#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"

class spisok
{ public:       
    spisok() {ps=NULL;}
    ~spisok(){};
    void push(void *p);
    void print();    

  private:
    struct list
    {void *data;   
         list *sled;};

    list *a,*s1,*s,*ps;


void spisok:: push(void *p)
{ s=new(list);  
  s->data=p;  
  s->sled=NULL;

  if (ps==NULL) 
  {ps=s; a=s;}
  else
  {ps->sled=s;
  ps=s;}

}


void spisok:: print()
{   void *w;
    int q=0;
    ps=a;
    do{w=ps->data;  
       q=*(int *) w;
       cout<<q;
       ps=ps->sled;}
    while (ps!=NULL);
    
}


class int_spisok : public spisok
{   public:
    int_spisok():spisok() {};
    void int_push(int p2) { spisok:: push(&p2);};
     
    
};

void main(void)
{   spisok tspisok;
    int_spisok tint_spisok;
    int m;
    cin>>m;
    tint_spisok.int_push(m);
    tint_spisok.print();
}
//////////////////////////////////////////////////////////
Программа работает и не выдает ошибок. Но проблема в том что выводимы результат отличается от того что вводишь!!
Пример:ввожу 1
выводит 4198970!!!!!!!!!
Помогите плиз подскажите что я непраильно делаю.

Модератор: Используйте тег <CODE> и прочтите правила

Последний раз редактировалось merax; 12.01.2008 в 09:46.
Vasek вне форума Ответить с цитированием
Старый 12.01.2008, 17:53   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Vasek Посмотреть сообщение
void int_push(int p2) { spisok:: push(&p2);};
Мне кажеца из-за этого. записывается адрес пареметра, передаваемого по значению, т.е. фактически локальной переменной. или передавай по ссылке/указатель или меняй на:
Код:
void int_push(int p2)
{
  int *ppp = new int;
  *ppp = p2;
  spisok::push(ppp);
};
pu4koff вне форума Ответить с цитированием
Старый 14.01.2008, 03:28   #3
Vasek
Новичок
Джуниор
 
Регистрация: 16.11.2007
Сообщений: 2
По умолчанию

Спасибо большое!!!!
Но я сам до этого уже дошел)))))))))))
Vasek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачкой плиз Raptor5 Паскаль, Turbo Pascal, PascalABC.NET 18 25.04.2011 19:38
Линейный двунаправленный список Seg_62 Паскаль, Turbo Pascal, PascalABC.NET 4 28.08.2008 21:02
Помогите пож-та.Паскаль. Линейный односвязный список (ЛОС) tonich Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2008 21:55
Линейный список Black_Ak24 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2008 15:00