Witajcie,
Przeszukałem kilka forów ale tak na dobrą sprawę nie znalazłem żadnego dobrego artykułu z przykładem implementacji i użycia listy dwukierunkowej.
Proszę o jakiś kompletny przykład / link do strony z materiałem.
Na razie jestem na etapie:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct lista{
int numer;
char* napis;
struct lista *next;
struct lista *prev;
}element_listy;
element_listy* nowy_element(){
element_listy *nowy;
char n[32];
char* wyraz;
int i;
system("CLS");
printf("\n\n\tPodaj nr elementu: ");
scanf("%d",&i);
fflush(stdin);
printf("\n\tWpisz wyraz: ");
gets(n);
wyraz = (char*)malloc(sizeof(char)*(strlen(n)+1));
strcpy(wyraz,n);
nowy = (element_listy*)malloc(sizeof(element_listy));
nowy->next = NULL;
nowy->prev = NULL;
nowy->numer = i;
nowy->napis = wyraz;
return nowy;
}
void dodaj(element_listy *head){
int wybor;
element_listy *nowy, *tmp;
do{
if (head == NULL){
nowy = nowy_element();
head = nowy;
}
else{
tmp=head;
nowy = nowy_element();
while (tmp->next != NULL)
tmp=tmp->next;
tmp->next = nowy;
}
printf("Chcesz dodac kolejny element (t/n)? :");
wybor=getchar();
} while (wybor=='t');
}
void drukuj_liste(element_listy *head)
{
element_listy *tmp=head;
while(tmp!=NULL)
{
printf("\n\nElement: %d, tekst:%s",tmp->numer, tmp->napis);
tmp=tmp->next;
}
}
int main(){
element_listy *head;
head=NULL;
dodaj(head);
drukuj_liste(&head);
printf("\n\n\n\t\t\t\tKoniec");
getch();
return 0;
}
Nie mogę za bardzo dojść co go wykrzacza oraz dlaczego nie wykonuje najprostszej operacji - drukowania.
Nie wiem też za bardzo jak zeralizować dwukierunkowość.