Witam! Chciałbym zaimplementować stos, zawierający listy, bez używania biblioteki STL. Mam podstawowe struktury: listę i stos (na liście jednokierunkowej, przechowuje wskaźnik na listę). Zrobiłem również funkcję dodającą dane do listy i wyświetlającą je, jednak nie mogę sobie poradzić z wrzucaniem list na stos. Czy ktoś mógłby pomóc?
Co znaczy wrzucaniem list na stos?
Wszystko zależy jak to sobie zorganizowałeś.
Najprostsza metoda: napisz osobno listę i osobno stos, a potem listę wstawiasz jako składową węzła stosu i już masz.
Mam zrobione tak jak napisałeś, jednak nadal mam problem z dodawaniem nowej listy na szczyt stosu. Podam fragment kodu, może ktoś pomoże mi z funkcją push ;)
Polecam następująca strukturę danych:
struct listnode
{
// tu dane np znak
char Z;
listnode *next;
};
struct list
{
listnode *first,*last;
};
struct stacknode
{
list L;
stacknode *next;
};
struct stack
{
stacknode *first;
};
Dzięki za pomoc, wygląda dosyć skomplikowanie :) Zrobiłem funkcję dodającą element do listy na razie, ale też coś nie do końca. Gdybyś mógł spojrzeć i podpowiedzieć, co robię źle:
void add(listnode *list,int a)
{
listnode *ptr;
ptr = new listnode;
ptr->znak = a;
ptr->next = list;
//tu powinno coś być, ale nie mam pomysłu (czyt. mój pomysł nie działa)
}
void add(list &L,int a)
{
listnode *ptr=new listnode;
ptr->znak=a;
ptr->next=0;
L.last=(L.last?L.last->next:L.first)=ptr;
}
Tak a propos, skoro używasz C++ (new) to czemu robisz to na strukturach a nie jak to się robi w C++ na klasach?
void push(stack &S,list &L)
{
stacknode *ptr=new stacknode;
ptr->L.first=ptr->L.last=0;
for(listnode *i=L.first;i;i=i->next) add(ptr->L,i->znak);
ptr->next=S.first;
S.first=ptr;
}
Ostatnio bardzo modne zrobiły się zadania z listami. Już czwarte widzę (napisane przez różnych użytkowników, z różnym kodem, tylko treść ta sama).
Gdzie się uczycie? Mogę się założyć, że pozostałe osoby są z Twojego roku w tej samej uczelni.