двусвязный список c++
Задали задачу на перегрузку нескольких операторов для класса Двусвязный список, а я даже не знаю как сам список реализовать.Мне бы функции добавления и взятия из списка посмотреть а дяльше сам разберусь.
Цитата: fun_phantom
Задали задачу на перегрузку нескольких операторов для класса Двусвязный список, а я даже не знаю как сам список реализовать.Мне бы функции добавления и взятия из списка посмотреть а дяльше сам разберусь.
Делали уже,смотри ТУТ.Там я приводил пример шаблонного двусвязного списка,с операторами.
[HTML]
class str //класс строки
{ //закрытая секция по умолчанию
int length; //длина строки
char *p; //указатель на массив символов для строки
public: //открытая секция класса
str();
str(const char *); //строка задается датой
str(int); //строка задается длиной
~str(); //деструктор очищает динамически выделенную память
str(const str &); //конструктор копий
void echo_data(); //функция выводит в стандартный поток длину и содержимое строки
str operator=(str); //перегруженный оператор присваивания
};
str::str()
{
cout << "Default str constructor without parameters" << endl;
length=maxl+1;
p=new char[length];
for (int j=0;j<length-1; ++j) p[j]='_';
p[length-1]='\0';
}
str::str(const char *t)
{
cout << "Constructor str with char* parameter" << endl;
int a=strlen(t);
if(a>maxl) {cout << "Error! Too long string" << endl; return;}
length=a+1;
p=new char[length];
for (int i=0;i<a; ++i) p=t;
p[length-1]='\0';
}
str::str(int i)
{
cout << "Constructor str with default int parameter" << endl;
if(i>maxl) {cout << "Error! Too long string" << endl; return;}
p=new char[i+1];
length=i+1;
for (int j=0;j<length-1; ++j) p[j]='a';
p[length-1]='\0';
}
str::str(const str &t)
{
cout << "Str copy constructor" << endl;
length=t.length;
p=new char [length];
for (int i=0;i<length; ++i) p=t.p;
}
str::~str()
{
cout << "Destructor str for " << endl;
echo_data();
delete [] p;
}
void str::echo_data()
{
cout << length-1 << "\t";
for (int i=0; i<length; ++i) cout << p;
cout << endl;
}
str str::operator =(str t)
{
cout << "Str operator =" << endl;
if(t.p[t.length-1]!='\0') {t.length++; t.p[length-1]='\0';}
delete [] p;
p=new char[t.length];
length=t.length;
for(int i=0;i<length-1;++i) p=t.p;
p[length-1]='\0';
return *this;
}
[/HTML]
и класс элемента двусвязного списка:
[HTML]
class delem //класс элемента двусвязного списка
{
private: //закрытая секция содержит данные - члены
str data; //строка данных списка
delem *next; //указатель на следующий элемент
delem *prev; //указатель на предыдущий элемент
public: //открытая секция содержит функции - члены доступа к данным - членам
delem(); //конструктор по умолчанию
delem(delem*, str); //конструктор с параметром
delem(const delem &); //конструктор копий
~delem(); //деструктор
delem operator=(delem); //перегруженный оператор присваивания, копирует данные и связи
};
delem::delem() //конструктор по умолчанию создает элемент список из 1 пустой строки
{
cout << "Delem default constructor" << endl;
data="\0";
next=NULL;
prev=NULL;
}
delem::delem(delem *t, str k="\0") //конструктор с параметром по умолчанию
{ //создает элемент списка после указанного
cout << "Delem constructor with default parameter" << endl;
prev=t;
next=t->next;
data=k; //и присваивает строке значение; если оно не заданное явно, то присваивается значение по умолчанию
}
delem::~delem()
{
cout << "Delem destructor" << endl;
}
delem::delem(const delem &t) //конструктор копий копирует строку элемента в новый элемент с нулевыми связями
{
cout << "Delem copy constructor" << endl;
next=NULL;
prev=NULL;
data=t.data;
}
delem delem::operator =(delem t)
{
next=t.next;
prev=t.prev;
data=t.data;
}
[/HTML]
компилятор ругается и падает. Что делать?