• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

listy jednokierunkowe

–1 głos
225 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez cba Użytkownik (620 p.)

mam do napisania 2 funkcje dotyczące list jednokierunkowych.

struct EList{
	int klucz;
	struct EList *nast;
};

budowanie listy w porządku prostym – elementy w liście znajdują się w kolejności ich dodawania, klucze podawane przez użytkownika – wersja nierekurencyjna,

 

sprawdzanie długości listy (funkcja zwracająca informację o liczbie elementów w liście) - wersja rekurencyjna.

POMOCY

komentarz 3 maja 2020 przez Patrycjerz Mędrzec (192,320 p.)
Z chęcią ci pomożemy, ale nie dajemy gotowców. Czego nie rozumiesz? Próbowałeś już coś napisać? Podziel się z nami swoim kodem, jeśli go masz.
komentarz 3 maja 2020 przez cba Użytkownik (620 p.)
#include <stdio.h>
#include <stdlib.h>

struct EList{
	int klucz;
	struct EList *nast;
};

 
struct EList* dodaj_elem(struct EList*q, int x);
void drukuj_liste(struct EList* q);  
struct EList* usun_elem(struct EList*q, int x);
void drukuj_rek(struct EList *q);
void drukuj_ostatni(struct EList *q);


int main(void){
int  i,x;
struct EList* glowa=NULL;
 
   	
for(i=0;i<5; i++)
  glowa=dodaj_elem(glowa,i);
			  
printf("\n");
drukuj_liste(glowa);
		  
	 
if(glowa!=NULL){
   printf("\nPodaj element do usuniecia: ");
   scanf("%d", &x);
   glowa=usun_elem(glowa,x);
  }
else
printf("Lista pusta");

if(glowa!=NULL){		  
printf("\nDrukowanie listy - od ostatniego do pierwszego elementu");
drukuj_rek(glowa); 
}

if(glowa!=NULL){
printf("\nDrukowanie ostatniego elementu listy");
drukuj_ostatni(glowa); 
}




return 0;
}

//------------------------------------------------------
struct EList* dodaj_elem(struct EList*q, int x){
struct EList*pom;
pom=(struct EList*)malloc(sizeof(struct EList));
pom->klucz=x;
pom->nast=q;
q=pom;
return q;
}

//------------------------------------------------------
void drukuj_liste(struct EList* q){
struct EList*pom;
int i=0;
pom=q;
if(pom==NULL)
  printf("\nLista pusta");
else{
  printf("\nElementy listy:");
  while(pom!=NULL){
	 printf("\nElement nr %d: %d",++i,pom->klucz);	
	 pom=pom->nast;
    }
  }
}
 
//------------------------------------------------------
struct EList* usun_elem(struct EList*q, int x){
struct EList*pom, *tmp;
pom=q;
while (pom !=NULL && pom->klucz!= x){
      tmp=pom;
	  pom=pom->nast;
	} 
if(pom!=NULL){
   if (pom == q)
      q=pom->nast;
   else
      tmp->nast=pom->nast;
      
   free(pom);
}
else
   printf("Elementu %d nie ma w liscie", x);
return q;
}
 
//------------------------------------------------------
void drukuj_rek(struct EList *q){
if(q!=NULL){
  drukuj_rek(q->nast);		
  printf("\n%d",q->klucz);	
  }
}

//------------------------------------------------------
void drukuj_ostatni(struct EList *q){
if(q->nast==NULL)
  	printf("\n%d",q->klucz);	
else
  drukuj_ostatni(q->nast);
}

i musze jeszcze dopisac te 2 funkcje i za bardzo nie mam pomyslu na nie

1 odpowiedź

0 głosów
odpowiedź 3 maja 2020 przez Patrycjerz Mędrzec (192,320 p.)

budowanie listy w porządku prostym – elementy w liście znajdują się w kolejności ich dodawania, klucze podawane przez użytkownika – wersja nierekurencyjna

Jeśli dobrze rozumiem, chodzi o prostą funkcję dodającą elementy do końca listy (zastępujące jej ogon). Przecież w kodzie opublikowanym w komentarzu takowa funkcja się znajduje.

 sprawdzanie długości listy (funkcja zwracająca informację o liczbie elementów w liście) - wersja rekurencyjna.

Dziwne jest to, że posiadasz w kodzie funkcje o wiele bardziej skomplikowane niż ta, a jednak nie potrafisz jej napisać… Po prostu iterujesz po kolejnych elementach listy, sprawdzając w warunku, czy doszedłeś do końca i zwracasz jej długość. Oto pseudokod:

int dlugosc_listy(struct Lista *glowa)
{
    if (glowa != NULL) {
        return dlugosc_listy(glowa, 1);
    }
    printf("\nLista jest pusta!");
    return 0;
}

int dlugosc_listy(struct Lista *element, int dlugosc)
{
    if (element->nastepny == NULL) {
        return dlugosc;
    } else {
        return dlugosc_listy(element->nastepny, ++dlugosc);
    }
}

Podobne pytania

0 głosów
0 odpowiedzi 336 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez Roberto12 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 488 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez gooster88 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 785 wizyt
pytanie zadane 8 maja 2020 w C i C++ przez Dyali56 Nowicjusz (150 p.)

93,428 zapytań

142,423 odpowiedzi

322,652 komentarzy

62,789 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...