Pagini recente » Cod sursa (job #1441832) | Cod sursa (job #2595208) | Cod sursa (job #2934707) | Cod sursa (job #454351) | Cod sursa (job #1699344)
#include <bits/stdc++.h>
#define NIL -1
struct nod {
int val;
nod *urm;
};
class list {
private:
nod* l;
int marime(nod* curr) {
if (curr == NULL) {
return 0;
}
return 1 + marime(curr -> urm);
}
void print(nod* curr) {
if (curr == NULL) {
fprintf(stdout, "\n");
return;
}
fprintf(stdout, "%d, ", curr -> val);
print(curr -> urm);
}
public:
list() {
l = NULL;
}
/** Marimea listei. **/
int size() {
return marime(l);
}
/** Adauga valoarea "x" in lista. **/
void insert(int x) {
nod* nou = new nod;
nou -> val = x;
nou -> urm = l;
l = nou;
}
/** Cauta valoarea "x" in lista. **/
int find(int x) {
if (size() == 0) {
assert(0);
}
int pos = 0;
nod* walk = l;
while (walk != NULL && walk -> val != x) {
walk = walk -> urm;
pos++;
}
return walk == NULL ? NIL : pos;
}
/** Sterge valoarea "x" din lista. **/
void erase(int x) {
int pos = this -> find(x);
if (pos != NIL) {
if (size() == 1) {
l = NULL;
} else if (pos == 0) {
l = l -> urm;
} else {
nod* prev = l;
nod* curr = prev -> urm;
while (curr -> val != x) {
prev = curr;
curr = prev -> urm;
}
prev -> urm = curr -> urm;
}
} else {
assert(0);
}
}
/** Sorteaza crescator lista. **/
void sort() {
if (size() <= 1) {
return;
}
for (nod* walk = l; walk -> urm != NULL; walk = walk -> urm) {
for(nod* curr = walk -> urm; curr != NULL; curr = curr -> urm) {
if (curr -> val < walk -> val) {
int tmp = curr -> val;
curr -> val = walk -> val;
walk -> val = tmp;
}
}
}
}
/** Intoarce pe dos lista. **/
void reverse() {
if (size() <= 1) {
return;
}
nod* tmp;
nod* prev = NULL;
nod* walk = l;
while (walk -> urm != NULL) {
tmp = walk -> urm;
walk -> urm = prev;
prev = walk;
walk = tmp;
}
walk -> urm = prev;
l = walk;
}
/** Afiseaza continutul listei. **/
void write() {
print(this -> l);
}
};
int main(void) {
list l;
l.insert(1);
l.insert(2);
l.insert(3);
l.insert(4);
l.insert(5);
l.insert(6);
l.insert(7);
l.write();
fprintf(stderr, "%d\n", l.size());
l.reverse();
l.write();
l.insert(10);
l.write();
l.reverse();
l.write();
l.erase(6);
l.write();
l.erase(10);
l.write();
l.sort();
l.write();
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}