Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу помогите разабраться в с++
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Leks100 Leks100 вне форума
Member
 
Аватар для Leks100
 
Сообщений: 75
Сказал(а) спасибо: 35
Поблагодарили 1 раз в 1 сообщении
Регистрация: 02.06.2011
По умолчанию помогите разабраться в с++ - 30.10.2011, 11:31


Здравствуйте
Не могу найти ошибку в программе
программа скомпилировать но не запускается не выводит окно




#include <d:\str_2.h>
#include<iostream.h>
template <class T>
class Node
{
friend class List <T>; //класс-друг
private:
T data; //элемент данных узла
Node *next; //указатель на следующий узел
public:
Node(T &); //конструктор с параметром
T getData(); //чтение элемента данных узла
};

template <class T>
Node <T> :: Node(T &d)
{
data = d;
next = NULL;
}
template <class T>
T Node <T> :: getData()
{
return data;
}
template <class T>
class List {
Node <T> *first; //указатель на первый узел
Node <T> *last; //указатель на последний узел
Node <T> *newNode(T &); // указатель на новый узел
public:
List(); //конструктор
~List(); //деструктор
void addHead(T &); //добавляет узел в начало списка
void addTail(T &); //добавляет узел в конец списка
int removeHead(T &); //удаляет узел из начала списка
int removeTail(T &); //удаляет узел из конца списка
int isEmpty(); //проверяет, пуст ли список
void sort(); //сортирует список, перенося "минимальный" элемент в конец нового списка
void print(); //печатает содержимое списка
};
template <class T>
List <T> :: List()
{
first = last = NULL;
}
template <class T>
List <T> :: ~List()
{
if(!isEmpty()) { //если список не пуст

Node <T> *curr = first; //указатель на текущий узел
Node <T> *temp; //указатель на удаляемый узел
cout << endl << "Deletion of nodes:" << endl;
while(curr != NULL) { //пока не конец списка
temp = curr; //запомнить удаляемый узел
curr = curr->next; //обновить текущий узел
// temp->data.Display("Current uzel");
cout << temp->data <<" "; //печать удаляемого узла
delete temp; //удалить узел
}
}
cout << endl << "All nodes are deleted" << endl;
}
template <class T>
void List <T> :: addHead(T &val)
{
Node <T> *newPtr = newNode(val); //создать новый узел
if(isEmpty()) //если список пуст
first = last = newPtr; //вставить в пустой список
else { //если список не пуст
newPtr->next = first; //вставить в начало списка
first = newPtr;
}
}
template <class T>
void List <T> :: addTail(T &val)
{
Node <T> *newPtr = newNode(val); //создать новый узел
if(isEmpty()) //если список пуст
first = last = newPtr; //вставить в пустой список
else { //если список не пуст
last->next = newPtr; //вставить в конец списка
last = newPtr;
}
}
template <class T>
int List <T> :: removeHead(T &val)
{
if(isEmpty()) //если список пуст
return 0; //неудачное удаление
else { //если список не пуст
Node <T> *temp = first; //запомнить удаляемый узел
if(first == last) //если конец списка
first = last = NULL; //сделать список пустым
else //если не конец списка
first = first->next; //обновить первый узел
val = temp->data; //передать элемент данных
delete temp; //удалить узел
return 1; //успешное удаление
}
}
template <class T>
int List <T> :: removeTail(T &val)
{
if(isEmpty()) //если список пуст
return 0; //неудачное удаление
else { //если список не пуст
Node <T> *temp = last; //запомнить удаляемый узел
if(first == last) //если конец списка
first = last = NULL; //сделать список пустым
else { //если не конец списка
Node <T> *curr = first; //сделать текущим первый узел
while (curr->next != last) //сделать текущим
curr = curr->next; //предпоследний узел
last = curr; //обновить последний узел
curr->next = NULL;
}
val = temp->data; //передать элемент данных
delete temp; //удалить узел
return 1; //успешное удаление
}
}
template <class T>
int List <T> :: isEmpty()
{
return first == NULL; //возвратить NULL, если список пуст
}
template <class T>
Node <T> *List <T> :: newNode(T &val)
{
Node <T> *p = new Node <T> (val); //создать новый узел
//assert(p != NULL);
return p;
}
/////////////////////////////////////////////////////////////
template <class T>
void List <T> :: print()
{
if(isEmpty()) {
cout << "List is empty" << endl << endl;
return;
}
Node <T> *curr = first; //сделать текущим первый узел
cout << "List:" << endl;
while (curr != NULL) //пока список не пуст
{
// curr->data.Display("NEXT UZEL");
cout << curr->data << " -> "; //напечатать текущий узел
curr = curr->next; //обновить текущий узел
}
cout << endl << endl;
}
////////////////////////////////////////////////////////////
template <class T>
void List <T> :: sort()
{
if(isEmpty()) {
cout << "List is empty" << endl << endl;
return;
}
cout << "SORT list:" << endl;
Node <T> *p, *prevP, *head = NULL, *end = NULL, *min, *prevM;

while(1)
{
min = prevM = first; // берем первый элемент как "минимальный"
p = first ->next;
prevP = first;
// сравниваем элементы списка с "минимальным"
while (p != NULL)
{
if(p -> data < min -> data)
{ min = p; prevM = prevP; }
prevP = p;
p = p ->next;
}

if(min == first) first = first -> next; // если "минимальный" стоит первым в списке
else
prevM -> next = min -> next; // исключаем из первого списка

min -> next = NULL;
if(head == NULL) { head = end = min;} // вставляем первым элементом во второй список
else
{ end -> next = min; end = end -> next;} // вставляем элемент в конец второго списка

if(first == NULL)break; //сортируем пока первый список не пуст
}
first = head; //второй список становится первым
last = end;
}
////////////////////////////////////////////////////////////
template <class T>
void testList(List <T> &l)
{
int choice;
T val;
menuList();
do {
cout << "? ";
cin >> choice;
switch (choice) {
case 1:
cout << "Insert FIRST: ";
// val.Input();
cin >> val;
l.addHead(val);
l.print();
break;
case 2:
cout << "Insert LAST: ";
cin >> val;
//val.Input();
l.addTail(val);
l.print();
break;
case 3:
if (l.removeHead(val))
cout << "NODE is deleted" << endl;
//val.Display(" ");
l.print();
break;
case 4:
if (l.removeTail(val))
cout << "NODE is deleted" << endl;
//val.Display(" ");
l.print();
break;
case 5:
l.sort();
//val.Display(" ");
l.print();
break;
}
} while (choice != 6);
}
void menuList()
{
cout << "1 - addHead()" << endl
<< "2 - addTail()" << endl
<< "3 - removeHead()" << endl
<< "4 - removeTail()" << endl
<< "5 - SORT()" << endl
<< "6 - exit()" << endl << endl;
}

void main()
{
cout << "List of integer numbers:" << endl << endl;
List <int> intList; //создание списка целых чисел
testList(intList); //обработка списка целых чисел
}
Ads
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов