@uNsLide
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 15
|
|
|
20.06.2009, 12:55. Просмотров 740. Ответов 0
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе:
У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились: Введите элемент и номер.
вот сам код:
Код
[CPP]
#ifndef __list_h
#define __list_h
#include <iostream>
#include <list>
using namespace std;
template <class Data> class Node
{
public:
Node<Data> *next;
Node<Data> *prev;
Data data; // данные
Node(Data adddata = 0, Node* addnext = 0, Node* addprev = 0)
{
data = adddata;
next = addnext;
prev = addprev;
}
Node* getNext()
{ return next; }
Node* getPrev()
{ return prev; }
void setNext(Node* node)
{ next = node; }
void setPrev(Node* node)
{ prev = node; }
Data getData()
{ return data; }
void setData(Data d)
{ data = d; }
};
template <class Data> class List
{
Node<Data> *begin;
Node<Data> *end;
public:
List()
{
begin = NULL;
end = NULL;
}
// Функции. Обьявление
~List();
bool empty();
void print();
void delHead();
void delTail();
int search(Data);
int remove(int index);
//---------------------------------------------------------------------------------------------------
//Описание функций
int DelALL()
{
Node<Data> *tmp;
if(begin!=0)
{
Node<Data> *tmp = begin;
while(tmp)
{
tmp = tmp->next;
begin = tmp;
delete tmp;
}
end = NULL;
}
}
void addToBegin(Data data)
{
Node<Data> *len = new Node<Data>(data,begin,NULL);
//Конструктор (данные, следующий элемент списка, предыдущий элемент)
if(begin) begin->setPrev(len);
else end = len;
begin = len;
}
void addToEnd(Data data)
{
Node<Data> *len = new Node<Data>(data,NULL,end);
if(end) end->setNext(len);
else begin = len;
end = len;
}
int addCustom(int num, Data data)
{
int znach = 0;
Node<Data> *next = begin, *prev;
while (znach < num)
{
if (next == NULL)
{ break; }
next = next->getNext();
znach ++;
}
if(next) prev = next->getPrev();
Node<Data> *len = new Node<Data>(data,next,prev);
if(prev)prev->setNext(len);
else begin = len;
if(next)next->setPrev(len);
else end = len;
}
void printFromEnd()
{
Node<Data> *tmp = end;
cout << " * * *" << endl;
cout << "List from the end: " << endl;
while (tmp)
{
cout << tmp->getData() << endl;
tmp = tmp->getPrev();
}
cout << " * * *" << endl;
}
int swap(int index1, int index2)
{
Node<Data> *tmp = begin;
int i = 0;
while (i<index1)
{
if (!tmp) return 0;
tmp = tmp->getNext();
i++;
}
if(!tmp) return -1;
Node<Data> *tmp1 = begin;
i = 0;
while (i<index2)
{
if (!tmp1) return 0;
tmp1 = tmp1->getNext();
i++;
}
if(!tmp1) return -1;
Data d = tmp->getData();
tmp->setData(tmp1->getData());
tmp1->setData(d);
return 0;
}
};
template <class Data> bool List<Data>::empty()
{
system("cls");
if( begin == 0 && end == 0) cout << "\nYes.List is Empty." << endl;
else cout << "\nNo.List isn't Empty." << endl;
}
template <class Data> List<Data>::~List()
{
system("cls");
DelALL();
}
template <class Data> void List<Data>::print()
{
Node<Data>* tmp = begin;
cout << " * * *" << endl;
cout << " List: " << endl;
while (tmp)
{
cout << (*tmp).getData() << endl;
tmp = (*tmp).getNext();
}
cout << " * * *" << endl;
}
template <class Data> void List<Data>::delHead()
{
Node<Data> *tmpDelete = NULL;
if (begin == 0)
{ cout << "\nEmpty List" << endl;
system("pause");
exit(0); }
if(begin->next == 0)
{
begin = end = NULL;
delete begin; }
tmpDelete = begin;
begin = tmpDelete->next;
begin->prev = NULL;
delete tmpDelete;
}
template <class Data> void List<Data>::delTail()
{
Node<Data> *tmpDelete = NULL;
Node<Data> *tmpEnd = NULL;
if (end == 0)
{ cout << "\nEmpty List" << endl;
system("pause");
exit(0); }
if(end->prev == 0)
{
begin = end = NULL;
delete end;
}
tmpDelete = end;
end = tmpDelete->prev;
end->next = NULL;
tmpEnd = end;
delete tmpDelete;
system("cls");
}
template <class Data> int List<Data>::search(Data n)
{
Node<Data> *tmp = begin;
int index = 0;
while (tmp)
{
if (tmp->getData() == n)
return index;
tmp = tmp->getNext();
index++;
}
return -1;
}
template <class Data> int List<Data>::remove(int index)
{
int count = 0;
Node<Data> *next = begin, *prev;
while (count < index)
{
if (next == NULL)
{return -1;}
next = next->getNext();
count ++;
}
if (next == NULL)
{return -1;}
prev = next->getPrev();
Node<Data> *del = next;
next = next->getNext();
prev->setNext(next);
next->setPrev(prev);
delete del;
return 0;
}
#endifх
[/CPP]
[CPP]
#include "kyrs.h"
//---------------------------------------- Menu --------------------------------------------
int Menu();
int GetNumber(int,int);
int main()
{
List<int>list;
bool done = false;
while(!done)
{
switch(Menu())
{
case 1: system("cls");
list.addToBegin(1);
list.addToEnd(8);
list.addCustom(1,7);
list.addCustom(1,6);
list.addCustom(1,5);
list.addCustom(1,4);
list.addCustom(1,3);
list.addCustom(1,2);
break;
case 2: system("cls");list.print(); break;
case 3: system("cls");list.printFromEnd(); break;
case 4: system("cls");
cout << "\nsearch(3) = " << list.search(3) << endl; break;
// 3 - 3-й элемент списка
case 5: system("cls");
cout << "\nswap(3,5) = " << list.swap(3,5) << endl;
system("pause");list.print();break;
case 6: system("pause");list.~List();break;
case 7: system("cls");
cout <<"Del elem №5\n"<<list.remove(5) << endl;list.print();system("pause");
cout <<"Del elem №4\n" <<list.remove(4) << endl;list.print();system("pause");
system("cls");
break;
case 8: system("pause");list.delTail();system("cls");
list.print();break;
case 9: system("pause");list.delHead();
system("cls");list.print();break;
case 11: cout << "\n\t\t\tThe End." << endl; exit(0);
case 10: list.empty();break;
done = true; break;
}
}
return 0;
}
int Menu() {
cout << "\n============================== Main Menu ===================================\n" << endl;
cout << "\t1 - Make a list \t\t\t 3 - Print from the back \n" << endl;
cout << "\t2 - Print the List \t\t\t 4 - Search in the list \n" << endl;
cout << "\t5 - Swap the elements \t\t\t 6 - Clear the List \n" << endl;
cout << "\t7 - Delete Custom Element \t\t 8 - Delete Tail\n" << endl;
cout << "\t9 - Delete Head\t\t\t\t 10 - Is List Empty?\n" << endl;
cout << "\t\t\t\t11 - End of Work\n" << endl;
return GetNumber(1,11);
}
int GetNumber(int min, int max)
{
int number=min;
while(true)
{
cin >> number;
if ((number>=min)&&(number <= max)&&(cin.peek()=='\n')) break;
else
{
cout << "Repeat the number please:" << endl;
cin.clear();
while (cin.get()!='\n') {};
}
}
return number;
system("pause");
}
[/CPP]
У меня это описано, но без этого вывода. Необходимо с ним. Я сам там немного запутался, кошда делал.
Заранее благодарю.
0
|