/**(c) 2016 Michał (Foxbond) Chraniuk */
#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <iostream>
#include <conio.h>
using namespace std;
//element stosu
typedef struct elem {
char name[50];
int age;
int lp;
struct elem *prev;
}elem;
elem *root = NULL;
int lp = 1;
void cls() {
system("cls");
}
void addPerson();
void delPerson();
void getPerson();
void printStack();
//utowrzenie węzła
elem* createElem(string name, int age) {
elem* osoba = (elem*)malloc(sizeof(elem));
strcpy(osoba->name, name.c_str());
osoba->age = age;
osoba->lp = lp++;
osoba->prev = NULL;
return osoba;
}
//dodanie elementu na stos
void addElem(elem* osoba) {
if (root == NULL) {//pierwszy element jako korzeń
root = osoba;
return;
}
osoba->prev = root;
root = osoba;
}
int main() {
char opt;
do {
cls();
cout << "1. Dodaj osobe\n2. Wyswietl stos\n3. Pobierz ostatnia osobe\n4. Pobierz osobe o konkretnym nr\n0. Wyjscie\n";
opt = _getch();
if (opt == '1') {
addPerson();
}
else if (opt == '2') {
printStack();
}
else if (opt == '3') {
delPerson();
}
else if (opt == '4') {
getPerson();
}
} while (opt != '0');
return 0;
}
//dodanie osoby
void addPerson() {
string imie;
int wiek;
cls();
cout << "Podaj imie: ";
cin >> imie;
cout << "\nPodaj wiek: ";
cin >> wiek;
addElem(createElem(imie, wiek));
}
//wyswietlenie stosu
void printStack() {
cls();
if (root == NULL) {
cout << "Stos jest pusty";
_getch();
return;
}
cout << "lp\tWiek\tImie\n";
elem* temp = root;
while (temp != NULL) {
cout << temp->lp << "\t" << temp->age << "\t" << temp->name << "\n";
temp = temp->prev;//zdejmowanie po jednym elemencie
}
_getch();
}
//usuniecie osoby
void delPerson() {
cls();
if (root == NULL) {
cout << "Stos jest pusty";
_getch();
return;
}
cout << "Lp: " << root->lp << "\nWiek: " << root->age << "\nImie: " << root->name << "\n";
root = root->prev;
_getch();
}
//pobranie os o konkretnym nr
void getPerson() {
int numer;
cls();
if (root == NULL) {
cout << "Stos jest pusty";
_getch();
return;
}
cout << "Podaj nr: ";
cin >> numer;
elem* temp = root;
while (temp != NULL) {
if (temp->lp == numer) {
cout << "Znaleziono:\n" << "Lp: " << temp->lp << "\nWiek: " << temp->age << "\nImie: " << temp->name << "\n";
_getch();
return;
}
temp = temp->prev;
}
cout << "Nie znaleziono osoby o takim numerze!";
_getch();
}
> Back