Skip to content

Instantly share code, notes, and snippets.

@dafr32
Created January 6, 2016 18:08
Show Gist options
  • Save dafr32/4b1b571ed9103351f18a to your computer and use it in GitHub Desktop.
Save dafr32/4b1b571ed9103351f18a to your computer and use it in GitHub Desktop.
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
/*
Koncepcja:
1. Utworzenie struktury elementu listy
2. Utworzyć wskaźnik na pierwszy element listy
3. Utworzyc funkcję DodajElement()
4. Utworzyc funkcję WyswietlListe()
5. W programie głównych poprawc dane i uruchomić odpowiednią funkcję
6. Utworzyc funkcję UsunElement()
*/
//1. Utworzenie struktury elementu listy
struct T_element{
string imie;
int wiek;
T_element *nastepny;
};
//2. Utworzyć wskaźnik na element
T_element *pierwszy = NULL;
//funkcja DodajElement(wartości)
void DodajElement(string parImie, int parWiek)
{
/* Dodawanie elementu do listy
1. utworzyć element tymczasowy
2. przypisać mu wartości parametrów
3. umieścić element na końcu listy
*/
// 1. utworzyć element tymczasowy
T_element *tmp = new T_element; // utworzenie nowego dynamicznego wskaźnika
// na nieistniejącą zmienną
// 2. przypisać mu wartości parametrów
tmp->imie = parImie;
tmp->wiek = parWiek;
tmp->nastepny = NULL; //jest ostatni i nie wskazuje na żaden inny
// 3. Umieszczenie elementu na końcu listy
// jeśli jest to pierwszy element
if (pierwszy==NULL)
{
pierwszy=tmp;
}else
{ //jeśli są jakieś elementy to trzeba po kolei dostać się do elementu ostatniego
/*
poszukiwanie ostatniego elementu listy:
1. utworzyć element tymczasowy i przypisać mu adres pierwzego elementu
2. za pomocą pętli przejść do elementu. który ma wpisane nastepny = NULL
3. przypisać mu wskazanie na nasz tymczasowy element
*/
T_element *tmp2 = pierwszy; // 1. utworzyć element tymczasowy i przypisać mu adres pierwzego elementu
while(tmp2->nastepny!=NULL)
{
tmp2 = tmp2->nastepny; //2. za pomocą pętli przejść do elementu. który ma wpisane nastepny = NULL
}
tmp2->nastepny = tmp; //3. przypisać mu wskazanie na nasz tymczasowy element
}
}
void UsunElement(string parametr1)
{
T_element *tmp = pierwszy;
T_element *tmp2 = pierwszy->nastepny;
// jeśli poszukiwane imie jest w pierwszym elemencie
if (tmp->imie == parametr1)
pierwszy = tmp2;
delete tmp; //usuń element tmp z pamięci
else
{
bool jest = false; //zmienne tymczasowa - czy znaleziono poszukiwane imię
//powtórz dopóki tmp2 nie jest puste i nie znaleziono imienia
while(tmp2!=NULL && jest==false)
{
//jeśli znaleziono imię
if (tmp2->imie == parametr1)
{
jest=true;
tmp->nastepny=tmp2->nastepny;
}else
{
tmp=tmp->nastepny;
tmp2=tmp2->nastepny;
}
}
if (jest) delete tmp2;
}
}
void PokazListe()
{
/*
Pętla:
1. Utworzyć wskaźnik tymczasowy i przypisać mu pierwszy element
2. Wyświetlić wartości elementu tmp
3. Zmienić adres wskaźnika na nastepny element listy
*/
system("clear");
cout<<left<<setw(20)<<"imie"<<left<<setw(5)<<"wiek \n"<<"------------------------------------"<<endl;
T_element *tmp = pierwszy; // 1. utworzyć element tymczasowy i przypisać mu adres pierwzego elementu
while(tmp!=NULL)
{
cout<<left<<setw(20)<<tmp->imie <<setw(5)<<tmp->wiek<<endl;
tmp = tmp->nastepny; // 3. Zmienić adres wskaźnika na nastepny element listy
}
cout<<endl<<endl;
}
int main()
{
char opcja;
string imie;
int wiek;
do {
//
cout<<" MENU\n"
<<"1. Dodaj element \n"
<<"2. Usun element \n"
<<"3. Wyswietl liste \n"
<<"4. Zakoncz program \n"
<<"------------------------------ \n"
<<"Wynierz opcje (1-4):";
cin>>opcja;
switch(opcja-48)
{
case 1: cout<<"Podaj imie:";cin>>imie;
cout<<"Podaj wiek:";cin>>wiek;
DodajElement(imie,wiek);
system("clear");
break;
case 2: cout<<"Podaj imie:";cin>>imie;
UsunElement(imie);
break;
case 3: system("clear");
PokazListe();
break;
case 4: return 0;break;
}
}while(true);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment