Lista cykliczna jednokierunkowa na dwukierunkową

0

Witam kolegów.

Napisałem w C listę cykliczną jednokierunkową i program działa bez zarzutów, jednak chciałbym ją przerobić na listę dwukierunkową.

Nie wiem jak spiąć listę, abym mógł przesuwać się również wskaźnikiem w lewo.
W komentarzach jest podkład pod przesuwanie w lewo z wykorzystaniem *prev, ale brakuje mi pomysłu na wcześniej wspomniane połączenia.

Kod programu:

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

struct el_listy
{
	struct el_listy *next;
	//struct el_listy *prev;
    unsigned long val;
};

el_listy *first;
el_listy *nowy;
el_listy *current;

void wypisz_liste(el_listy *lista)
{
el_listy *wsk=lista;
printf ("%lu\n", wsk->val);
printf ("%lu\n", wsk->next->val);
printf ("%lu\n", wsk->next->next->val);
}

void wskaznik()
{
printf("%lu\n", current->val);
}

void przesunwskaznikP()
{
current = current->next;
}

//void przesunwskaznikL()
//{
//current = current->prev;
//}

int _tmain(int argc, _TCHAR* argv[])
{
first = (el_listy *) malloc (sizeof(el_listy));
first->val = 1;
first->next = NULL;
//
current=first;

nowy = (el_listy *) malloc (sizeof(el_listy));
nowy->val = 2;
nowy->next = NULL;
//
first->next = nowy;

nowy = (el_listy *) malloc (sizeof(el_listy));
nowy->val = 3;
nowy->next = first;
first->next->next = nowy;
//

int x=1;
do{
printf("\n\nMENU\n");
printf("1 - WYPISZ LISTE\n");
printf("2 - WYSWIETL WSKAZNIK\n");
printf("3 - PRZESUN WSKAZNIK W PRAWO\n");
//printf("4 - PRZESUN WSKAZNIK W LEWO\n");
printf("0 - ZAKONCZ PROGRAM\n\n");
printf("Wybierz opcje z menu: ");
scanf("%d",&x);

if(x==1){
printf("Aktualna lista:\n");
wypisz_liste(first);
}
if(x==2){
printf("Wskaznik znajduje sie w tym momencie w: ");
wskaznik();
}
if(x==3){
printf("Przesunieto wskaznik w prawo\n");
przesunwskaznikP();
}
//if(x==4){
//printf("Przesunieto wskaznik w lewo\n");
//przesunwskaznikL();
//}
}while(x!=0);
printf("Program zostal zakonczony.\n");
return 0;
}
0

Przypinasz poprzedni element listy do następnego a następny do poprzedniego.

nowy->next = NULL; 

W liście cyklicznej?

Poniższy kod się kompiluje kompilatorem C?

struct el_listy { ... };
el_listy *first;
el_listy *nowy;
el_listy *current;
void wypisz_liste(el_listy *lista) { ... }
void wskaznik() {...}
void przesunwskaznikP() { ... } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1