[ _shame_ @ 21.01.2006. 16:36 ] @
Moze li mi neko pojasniti ovaj kod….i ako jee moguce da ga prevede iz C u C++….bio bi jako zahvalan:)):

#include <stdio.h>
#include <stdlib.h>

typedef struct ns {
int data;
struct ns *next;
} node;


node *list_add(node ** p, int i) {
node *n =malloc(sizeof(*n));
n->next = *p;
*p = n;
n->data = i;
return n;
}
void list_remove(node ** p) {
if (p) {
node *n = *p;
*p = (*p)->next;
free(n);
}
}

node **list_search(node ** n, int i) {
if (!n) return NULL;
while (*n) {
if ((*n)->data == i) {
return n;
}
n = &(*n)->next;
}
return NULL;
}

void list_print(node * n) {
if (!n) printf("list is empty\n");
while (n) {
printf("print %p %p %i \n", n, n->next, n->data);
n = n->next;
}
}

int main(void) {
node *n = NULL;

list_add(&n, 0);
list_add(&n, 1);
list_add(&n, 2);
list_add(&n, 3);
list_add(&n, 4);
list_print(n);
list_remove(&n);
list_remove(&n->next);
list_remove(list_search(&n, 1));
list_remove(&n->next);
list_remove(&n);
list_print(n);

return 0;
}
[ NrmMyth @ 21.01.2006. 16:56 ] @
Problem onih koji su odmah ucili C++ bez znanja C je upravo ovo.
Kako mislis prevesti C kod u C++ kad je on vec sam od sebe potpuno kompatibilan sa C++ kompajlerima?

Radi se o maloj biblioteci za rad sa listom.
U C++(STL) potrazi std::list.
[ _shame_ @ 21.01.2006. 22:37 ] @
Hm...meni za zadacu treba ovaj kod,ali u c++,znam da je kod sam od sebe potpuno kompatibilan sa C++ kompajlerima,ali to mi prof nece šriznati:((.
[ _shame_ @ 21.01.2006. 22:39 ] @
A i ovaj mi kod javlja BUG u ovom redu:
node *n =malloc(sizeof(*n));
Pa ak moze da se bar to ispravi.
[ Goran Arandjelovic @ 22.01.2006. 00:41 ] @
A probaj da napišeš sledeće:

node *n = (node*)malloc(sizeof(*n));
[ Pharos @ 22.01.2006. 00:46 ] @
ili
node *n = malloc(sizeof(node));
?

To ti je zamena za:
node *n;
n=malloc(sizeof(node));

[Ovu poruku je menjao Pharos dana 22.01.2006. u 02:01 GMT+1]
[ Pharos @ 22.01.2006. 03:25 ] @
Imaš ti tu još grešaka, npr:
Funkcija za brisanje liste:
Umesto
Code:

void list_remove(node ** p) {
if (p) {
node *n = *p;
*p = (*p)->next;
free(n);
}
}

Trebalo bi:
Code:

void list_remove(node ** p) {
while(*p) {
node *n = *p;
*p = (*p)->next;
free(n);
}
}

While petlja je potrebna zato što moraš proći kroz sve elemente liste.
[ _shame_ @ 28.01.2006. 23:25 ] @
moze li mi neko reci...sta radi u ovom redu radi malloc?
node *n = malloc(sizeof(node));
Ili sta inace radi malloc??
[ dimitar 16 @ 28.01.2006. 23:35 ] @
Alocira memorija na heap-u.
[ _shame_ @ 29.01.2006. 00:58 ] @
Mozes li malo detaljnije..ne kuzim ja bash c++
[ SashaX @ 29.01.2006. 17:59 ] @
Znaci da si "rezervisao" prostor u memoriji velicine node tipa (sizeof() vraca velicinu u bajtovima), i vratio adresu tog alociranog prostora pointeru n
[ dragansm @ 29.01.2006. 18:35 ] @
Ovaj kod:
Code:

int main(void) {
node *n = NULL;

list_add(&n, 0);
list_add(&n, 1);
list_add(&n, 2);
list_add(&n, 3);
list_add(&n, 4);
list_print(n);
list_remove(&n);
list_remove(&n->next);
list_remove(list_search(&n, 1));
list_remove(&n->next);
list_remove(&n);
list_print(n);

return 0;
}


treba da ima oblik
Code:

int main(void) {
node *n = NULL;

my_list list;

list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
n = list.last();
list.print(n);
list.remove(n);
list.remove(n->next);
n = list.search(1)
list.remove(n);
list.remove(n->next);
list.remove(n);
list.print(n);

}


Na tebi je da o datog c koda napises klasu my_list.
[ smark @ 30.01.2006. 00:08 ] @
Citat:
_shame_: moze li mi neko reci...sta radi u ovom redu radi malloc?
node *n = malloc(sizeof(node));
Ili sta inace radi malloc??


Zar se u C++ ne koristi new umesto malloc?
[ B.Lale @ 31.01.2006. 08:38 ] @
Pa ako profa nije trazio bash objektno orijentisan program onda samo umesto malloc stavis new i umesto free stavis delete.
Umesto:
node *n =(node*)malloc(sizeof(node));

Ide:
node *n = new node;

A umesto:
free(n);

Ide:
delete n;

I umesto printf koristi cout.
I da, umesto:
#include <stdio.h>
#include <stdlib.h>

Pisi:
#include <cstdlib>
#include <iostream>
using namespace std;

Toliko od mene...
[ _shame_ @ 02.02.2006. 17:29 ] @
pa sta cu staviti umesto:
novi=(Elem*)malloc(sizeof(Elem));...
Kako da ovo napisem preko new naredbe???