Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Двусвязный список


Автор: papam 21.4.2006, 16:46
Есть прога помогите дописать:
SetSize(int size, int grow = 1) - установка размера массива (если параметр size больше предыдущего размера массива, то выделяется дополнительный блок памяти, если нет, то "лишние" элементы теряются и память освобождается); параметр grow определяет для какого количества элементов необходимо выделить память, если количество элементов превосходит текущий размер массива. Например, SetSize(5, 5); означает, что при добавлении 6-го элемента размер массива становится равным 10, при добавлении 11-го - 15 и т. д. 

GetUpperBound - получение последнего допустимого индекса в массиве. Например, если при размере массива 10, вы добавляете в него 4 элемента, то функция вернет 3. 

Вот прога:
Код

#include <iostream.h>

template<typename T>
struct Elem
{
    T data;T pos;
    Elem *Next,*prev;
};
template<typename T>
class Array
{
    Elem<T> *Head,*Tail;
    int Size;
    public:
        Array();
       ~Array();
        int GetSize();
        DelAll();
        Array:: GetAt(int pos);
        Array<T>::Del(int n);
        Array<T>::operator = (const Array<T> & A);
        void IsEmty();
        Array<T>::operator < (const Array& A);

};
template<typename T>
Array<T>::Array()
{
    Head=Tail=0;
    Size=0;
}
template <typename T>
Array<T>::~Array()
{
   DelAll();
}
template <typename T>
Array<T>::operator = (const Array<T> & A)
{
   if(this == &A)
      return *this;

   this->~Array();

   Elem<T> * temp = A.Head;

   while(temp != 0)
   {
      AddTail(temp->data);
      temp = temp->Next;
   }

   return *this;
}

template <typename T>
Array<T>::operator < (const Array& A)
{
   if(Size < A.Size)
      return true;
    
   return false;
}


template <typename T>
Array<T>::DelAll()
{
   while(Size != 0)
      Del(1);
}
template <typename T>
 Array<T>::Del(int n)
{   
  
    {
      cout << "Ydaliaemii element""\n";
      return(0);
   }
    
   int i = 1;
   Elem<T> * Del = Head;
    
   while(i < n)
   {
      Del = Del->Next;
      i++;
   }
   Elem<T> * PrevDel = Del->prev;
   Elem<T> * AfterDel = Del->Next;
    
   if(PrevDel != 0 && Size != 1)
      PrevDel->Next = AfterDel;
        
   if(AfterDel != 0 && Size != 1)
      AfterDel->prev = PrevDel;
    
   if(n == 1)
      Head = AfterDel;
   if(n == Size)
      Tail = PrevDel;
   delete Del;
  Size--;
}
template<typename T>
void  IsEmty()
{
    for(int i=0;i<GetSize;i++)
    {
        if (i==NULL)
        {
            cout<<"Massiv pust""\n";
        }
        else

        cout<<"V Massive imeutsa elementi""\n";
        
    }

}


template<typename T>
int Array<T>::GetSize()
{
    return Size;
}
template <typename T>
Array<T>::GetAt(int pos)
{
    Elem<T> *temp = Head;
   
   {
      cout <<" GetAt =  ";
    }
   
   int i = 1;
   while(i < pos && temp != 0)
   {
      temp = temp->Next;
      i++;
   }

}


void main()
{    Array<int> a;
    int m[]={9,1,5, 6,4, 0,2,3,2,8};
     double d[]={0.9, 10.5, 0.1, 2.4};
     cout<<"\n";
     cout<<"Elementi massiva : ";
     for(int i=0; i<10; i++) cout<<m[i]<<' ';cout<<"\n";
     cout<<"********************************""\n";
     cout<<"\n";
     a.GetAt(2);
     cout<<m[0]<<"\n";
     cout<<"\n";
     cout<<"************************""\n";
     a.GetSize();
     cout<<"GetSize ="<<i<<"\n";
     cout<<"********************************""\n";
    a.IsEmty();
 
     
 //   for(i=0; i<4; i++)cout<<d[i]<<' ';cout<<"\n";
//   cout<<"********************************""\n";
  //   a.GetElem(1);
//   cout<<d[0]<<"\n";
 //    cout<<"********************************""\n";
//   a.Del(i);
//   cout<<d[2]<<"\n";
     
}


 

Автор: pablo 21.4.2006, 16:53
а что делать то надо ? что дописать ? 

Автор: papam 21.4.2006, 17:19
две функции 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)