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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2010, 10:17   #1
sazonoff.13
Новичок
Джуниор
 
Регистрация: 07.10.2010
Сообщений: 1
По умолчанию Проблема с классами

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;


class List
{
public:
List(List& list);
List(int num);
~List();
void out_list();
void add_list(List& list);
void insert(int elem);
private:
struct node 
{
int info;
struct node *next;
};
private:
node* m_head;
int count;
};

List::List(int num)
{
m_head=NULL;
for(int i=0;i<num;i++)
{
this->insert(rand()%100);
}
}

List::List(List& list)
{
m_head=NULL;
node* p1=list.m_head;
while(p1)
{
this->insert(p1->info); 
p1=p1->next;
} 
}

void List::insert(int elem)
{
node* p = m_head;
node* el = new node;
el->info = elem;
el->next = NULL;
if(!m_head)
{
m_head = el;
}else if(m_head->info>el->info)
{
el->next = m_head;
m_head = el;
}else
{
while(p->next)
{
if(p->info<=el->info && p->next->info>=el->info)
{
el->next = p->next;
p->next = el;
break;
}
p=p->next;
}
if(!p->next)
{
p->next = el;
}
}
}
List::~List()
{
node* p =m_head;
while(p)
{
node* temp = p;
p=p->next;
delete temp;
}
}
void List::out_list()
{
node* p = m_head;
if(p)
{
while(p)
{
cout<<p->info<<' ';
p=p->next;
};
}else
{
cout<<"empty list"<<endl;
}
cout<<endl;
}

void List::add_list(List& list)
{
node* p1=list.m_head;
while(p1)
{
this->insert(p1->info); 
p1=p1->next;
} 
}

void main()
{ 
srand((unsigned)time(NULL));

List list1(5);
cout<<"List1:"<<endl;
list1.out_list();

List list2(list1);
cout<<"List1:"<<endl;
list2.out_list();

List list3(6);
cout<<"List3:"<<endl;
list3.out_list();

list2.add_list(list3);
cout<<"List2+list3:"<<endl;
list2.out_list();

getch();
НУЖНО ЧТОБЫ ВЫВОДИЛСЯ ПОСЛЕДНИЙ ЭЛЕМЕНТ КАЖДОГО СПИСКА

Последний раз редактировалось Stilet; 07.10.2010 в 10:30.
sazonoff.13 вне форума Ответить с цитированием
Старый 07.10.2010, 10:45   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
struct node 
{
int info;
struct node *next;
};
вот это лучше вывести за пределы класса и определить как typedef

далее - усовершенствуй свой лист, у тебя есть указатель на начало листа, добавь еще один указатель - на последний элемент, каждый раз при добавлении элемента делать указатель на него, и тогда вопросов по выводу последнего элемента не возникнет

выкладываю код листа, но он написан с использованием шаблонов (это не так сложно как звучит))) (в нем есть ошибки небольшие, сразу предупреждаю)
Код:
template <typename Type> class Item {
public:
  Type data;
  int index;
  Item *next;
  Item *prev;
};

template <typename Type> class List {
private:
  int Length;
  Item<Type> *head;
  Item<Type> *tail;

public:

  Type & operator [] (const unsigned int index) {
    if (index >= 0 && index < GetLength()) {
      Item<Type> *tmp = head;
      while (tmp != NULL) {
        if (index == tmp->index) {
          return tmp->data;
        }
        tmp = tmp->next;
      }
    }
  }

  List(void) {
    Length = 0;
    head = tail = NULL;
  }

  void Clear(void) {
    Item<Type> *tmp = NULL;
    while (head != NULL) {
      tmp = head->next;
      delete head;
      head = tmp;
    }
    Length = 0;
  }

  void Add(const Type value) {
    Item<Type> *tmp = new Item<Type>;
    int index;
    if (tail == NULL) {
      index = 0;
    }
    else {
      index = tail->index + 1;
    }
    if (GetLength() > 0) {
      tmp->prev = tail;
      tail->next = tmp;
      tail = tmp;
    }
    else {
      tmp->prev = NULL;
      head = tail = tmp;
    }
    tmp->index = index;
    tmp->data = value;
    tmp->next = NULL;
    Length++;
  }

  void Remove(const unsigned int index) {
    Item<Type> *tmp = head;
    Item<Type> *tmp2 = NULL;
    if (index >= 0 && index < GetLength()) {
      while (tmp != NULL) {
        if (index == tmp->index) {
          if (tmp->prev != NULL) {
            tmp2 = tmp->prev;
            tmp2->next = tmp->next;
          }
          else {
            head = tmp->next;
          }
          if (tmp->next != NULL) {
            tmp2 = tmp->next;
            tmp2->prev = tmp->prev;
          }
          else {
            tail = tmp->prev;
          }
          delete tmp;
          while (tmp2 != NULL) {
            tmp2->index--;
            tmp2 = tmp2->next;
          }
          break;
        }
        tmp = tmp->next;
      }
      Length--;
    }
  }

  Type GetItemFromIndex(const unsigned int index) {
    if (index >= 0 && index < GetLength()) {
      Item<Type> *tmp = head;
      while (tmp->next != NULL) {
        if (index == tmp->index) {
          return tmp->data;
        }
        tmp = tmp->next;
      }
    }
  }

  unsigned int GetLength(void) {
    return Length;
  }

  int FindItem(const Type value) {
    int res = -1;
    if (GetLength() > 0) {
      Item<Type> *tmp = head;
      while (tmp != NULL) {
        if (tmp->data == value) {
          res = tmp->index;
          break;
        }
        tmp = tmp->next;
      }
    }
    return res;
  }

  ~List(void) {
    Clear();
  }
};
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# ошибка с классами nuevegramodelamor Помощь студентам 0 04.10.2010 12:45
STL с классами Progsenya Общие вопросы C/C++ 3 06.09.2010 22:06
работа с классами jec Общие вопросы C/C++ 30 05.09.2010 00:03
С++: работа с классами MR_Andrew Общие вопросы C/C++ 23 01.04.2010 23:46
проблемма с классами ciaonataha Общие вопросы C/C++ 1 24.07.2009 18:04