Witam! Usiłuję napisać listę wiązaną dwukierunkową korzystając ze struktur. Po wielu h udało mi się napisać, jednak program nie działa. Prosiłbym o pomoc,wskazanie błędów i ewentualne poprawienie.
#include
#include
#include
typedef struct element
{
int v;
struct element *nast, *pop;
}elementy;
struct element *pocz=NULL;
struct element *koniec=NULL;
int sizee=0;
struct element *push_front(elementy *p, int w)
{
p->nast = pocz;
p->pop = NULL;
if(pocz)
pocz->pop = p;
pocz = p;
if(!koniec)
koniec = pocz;
p->v=w;
sizee++;
return pocz;
}
struct element *push_back(elementy *p, int w)
{
if(koniec)
koniec->nast = p;
p->nast = NULL;
p->pop = koniec;
koniec = p;
if(!pocz)
pocz = koniec;
p->v=w;
sizee++;
return koniec;
}
struct element *insert(elementy *p1, elementy *p2, int w)
{
int temp;
p1->nast = p2->nast;
p1->pop = p2;
p2->nast = p1;
if(p1->pop)
p1->nast->pop = p1;
else koniec = p1;
p1->v=temp;
p2->v=p1->v;
p1->v=w;
sizee++;
return p1;
}
struct element *pop_front()
{
elementy *p;
if(pocz)
{
p = pocz;
pocz = pocz->nast;
if(!pocz)
koniec = NULL;
else pocz->pop = NULL;
sizee--;
return p;
}
else return NULL;
}
struct element *pop_back()
{
elementy *p;
if(koniec)
{
p = koniec;
if(p == pocz)
pocz = koniec = NULL;
else
{
koniec = koniec->pop;
koniec->nast = NULL;
}
sizee--;
return p;
}
else return NULL;
}
struct element *remove(elementy *p)
{
elementy *p1;
if(p->pop)
p->pop->nast = p->nast;
else pocz = p->nast;
if(p->nast)
p->nast->pop = p->pop;
else koniec = p->pop;
sizee--;
return p;
}
void print()
{
elementy *p;
if(!pocz)
printf("Lista jest pusta \n");
else
{
p = pocz;
while(p)
{
printf("%d", p->v);
p = p->nast;
}
printf("\n");
}
}
void print_backward()
{
elementy *p;
if(!koniec)
printf("Lista jest pusta \n");
else
{
p = koniec;
while(p)
{
printf("%d", p->v);
p = p->pop;
}
printf("\n");
}
}
struct element *at(int n)
{
elementy *p;
if((!n) || (n > sizee))
return NULL;
else if(n == sizee)
return koniec;
else if(n < sizee / 2)
{
p = pocz;
while(--n) p = p->nast;
return p;
}
else
{
p = koniec;
while(sizee > n++) p = p->pop;
return p;
}
}
int front()
{
return pocz->v;
}
int back()
{
return koniec->v;
}
int size()
{
return sizee;
}
int isEmpty(elementy *p)
{
if (p==NULL)
return 0;
else if(p!=NULL)
return 1;
}
int main()
{
int s,t,war, il, kt,z, us,i,ktr,wart;
struct element el;
printf("\n\nAktualna liczba elementow listy %d\n\n", size());
printf("\n\nCo chcesz zrobic?\n");
printf("1. Wpisac elementy od poczatku listy\n");
printf("2. Wpisac element od konca listy\n\n");
scanf("%d", &s);
system("cls");
switch(s)
{
case 1:
printf("Ile elementow chcesz wpisac?\n");
scanf("%d", &il);
for(i=1; i
{
printf("Podaj wartosc elementu?\n");
scanf("%d", &war);
push_front(&el, war);
}
break;
case 2:
printf("Ile elementow chcesz wpisac?\n");
scanf("%d", &il);
for(i=1; i
{
printf("Podaj wartosc elementu?\n");
scanf("%d", &war);
push_back(&el, war);
}
}
system("CLS");
printf("\n\nAktualna liczba elementow listy %d\n\n", size());
printf("\n\nCo chcesz zrobic?\n");
printf("1. Usunac pierwszy element listy\n");
printf("2. Usunac ostatni element listy\n\n");
printf("3. Usunac dowolny element listy\n");
printf("4. Wpisać element w środku listy\n\n");
printf("5. Wyswietlic liste\n\n");
scanf("%d", &t);
system("CLS");
switch(t)
{
case 1:
pop_front();
printf("Pierwszy element usuniety \n");
break;
case 2:
pop_back();
printf("Ostatni element usuniety \n");
break;
case 3:
printf("Ktory elemnt chcesz usunac?\n");
scanf("&d", &kt);
remove(at(kt));
printf("\nWybrany element zostal usuniety\n");
break;
case 4:
printf("\n\nAktualna liczba elementow listy %d\n\n", size());
printf("Ktory element chcesz wpisac?\n");
scanf("%d", &ktr);
printf("Podaj wartosc tego elementu\n");
scanf("%d", &wart);
insert(at(ktr), at(ktr-1), wart);
printf("Element dodany\n");
case 5:
printf("\n\nCo chcesz zrobic?\n");
printf("1. Wyswietlic pierwszy element listy\n");
printf("2. Wyswietlic ostatni element listy\n\n");
printf("3. Wyswietlic cala liste\n");
printf("4. Wyswietlic cala liste od konca\n");
scanf("%d", &z);
switch(z)
{
case 1:
printf("Pierwszy element listy = %d", front());
system("PAUSE");
break;
case 2:
printf("Ostatni element listy = %d", front());
system("PAUSE");
break;
case 3:
printf("Zawartosc listy: \n");
print();
system("PAUSE");
break;
case 4:
printf("Zawartosc list od konca: \n");
print_backward();
system("PAUSE");
break;
}
}
system("CLS");
printf("Czy chcesz usunac cala liste?\n");
printf("1. Tak\n");
printf("2. Nie \n");
if(us==1)
{
while(size())
pop_front();
printf("Lista wyczyszczona\n");
}
printf("\n\nAktualna liczba elementow listy %d\n\n", size());
if(isEmpty(&el)==1)
printf("Lista posiada elementy\n)");
else printf("Lista jest pusta\n");
system("PAUSE");
return 0;
}