#include <iostream>
using namespace std;
class lista;
class element
{
element *next;
element *prev;
int imie;
public:
element()
{
cout << "Podaj liczbe: ";
cin >> imie;
}
friend class lista;friend class graf;
};
class lista
{
element *head;
public:
lista();
~lista()
{
element *next;
for(element *ptr = head; ptr; ptr = next)
{
next = ptr -> next;
delete ptr;
}
}
void add_first();
void add_last();
void add_last(int);
void delete_first();
void delete_last();
void delete_current(element *current);
bool isempty(){return head == NULL;}
void print_all();
void print_current(element *current);
void menu();
void delete_all();
void delete_by_name();
void add_ordered();
friend class graf;
};
lista::lista()
{
head = NULL;
char odp = 't';
while(odp == 't')
{
add_last(0);
cout << "Dalej?: ";
cin >> odp;
}
}
void lista::add_ordered()
{
}
void lista::add_first()
{
if(isempty())
{
head = new element;
head -> prev = NULL;
head -> next = NULL;
}
else
{
element *nowy = new element;
nowy -> next = head;
head -> prev = nowy;
head = nowy;
head -> prev = NULL;
}
}
void lista::add_last()
{
if(isempty()) add_first();
else
{
element *nowy = new element;
element *ptr = head;
while(ptr -> next) ptr = ptr -> next;
ptr -> next = nowy;
nowy -> prev = ptr;
nowy -> next = NULL;
}
menu();
}
void lista::add_last(int)
{
if(isempty()) add_first();
else
{
element *nowy = new element;
element *ptr = head;
while(ptr -> next) ptr = ptr -> next;
ptr -> next = nowy;
nowy -> prev = ptr;
nowy -> next = NULL;
}
}
void lista::print_current(element *current)
{
cout << endl;
cout << "***Imie: " << current -> imie << endl;
}
void lista::print_all()
{
if(isempty()) cout << "Lista jest pusta!!!" << endl;
else
{
for(element *ptr = head; ptr; ptr = ptr -> next) print_current(ptr);
}
}
void lista::menu()
{
int odp;
cout << "\n\n\nLista opcji:" << endl;
cout << "------------" << endl;
cout << "\n1. Dodaj element na poczatek listy\n2. Dodaj element na koniec listy\n3. Usun pierwszy element z listy\n4. Usun ostatni element z listy\n5. Oproznij liste\n6. Wyswietl aktualna zawartosc listy\n7. Usun elementy ze wzgledu na imie\n8. Dodaj alfabetycznie\n\n9. Opusc menu" << endl;
cin >> odp;
system("CLS");
switch(odp)
{
case 1: add_first(); break;
case 2: add_last(); break;
case 3: delete_first(); break;
case 4: delete_last(); break;
case 5: delete_all(); break;
case 6: print_all(); break;
case 7: delete_by_name(); break;
case 8: add_ordered();
}
}
void lista::delete_by_name()
{
}
void lista::delete_first()
{
element *ptr = head -> next;
delete head;
head = ptr;
menu();
}
void lista::delete_last()
{
element *ptr = head;
if(head -> next == NULL){delete head; head = NULL;}
else
{
while((ptr -> next) -> next) ptr = ptr -> next;
delete ptr -> next;
ptr -> next = NULL;
}
menu();
}
void lista::delete_current(element *current)
{
if(current == head)
{
if(current -> next == NULL)
{
delete head;
head = NULL;
}
else
{
element *temp = head;
head = head -> next;
head -> prev = NULL;
delete temp;
}
}
else
{
if(current -> next == NULL)
{
(current -> prev) -> next = NULL;
delete current;
}
else
{
(current -> prev) -> next = current -> next;
(current -> next) -> prev = current -> prev;
delete current;
}
}
}
void lista::delete_all()
{
element *next;
for(element *ptr = head; ptr; ptr = next)
{
next = ptr -> next;
delete ptr;
}
head = NULL;
menu();
}
//...........................................................
class graf
{
public:
lista *tab;
graf();
int liczba;
int **macierz;
friend class lista;
void print();
};
graf::graf()
{
cout << "Podaj liczbe wierzcholkow: ";
cin >> liczba;macierz = new int * [liczba];
for(int k = 0; k < liczba; k++) macierz[k] = new int [liczba];
for( k = 0; k < liczba; k++)
for(int z = 0; z < liczba; z++)
macierz[k][z] = 0;
for( k = 0; k < liczba; k++) macierz[k][k] = 1;
//.........................pusta macierz
tab = new lista [liczba];
//.....................................listy
for(int a = 0; a < liczba; a++)
{
element *ptr = tab[a].head;
while(ptr)
{
macierz[a][ptr ->imie] = 1;
macierz[ptr ->imie][a] = 1;
ptr = ptr -> next;
}
}
}
void graf::print()
{
for(int k = 0; k < liczba; k++){
for(int z = 0; z < liczba; z++){
cout << macierz[k][z]<< " ";}
cout << endl;}
}
void main()
{
graf nowy;
nowy.print();
}