listy w c wstawianie na prawy koniec i pobieranie z lewego konca

0

witam
czy moglby ktos napsiac mi te 2 funkcje i chociaz pobieznie wytlumaczyc, bylbym wdzieczny.
pozdrawiam

0

Co to jest "lewy koniec" ? ;p Poczatek ? Jesli to jest poczatek, to po prostu jest to glowa listy. A wstawianie na koniec (prawy koniec ? ;p) - iterujesz po kolejnych elementach, az znajdziesz element, ktorego "next" jest rowny null -> wtedy alokujesz pamiec na nowy element i jego adres wpisujesz zamiast tamtego nulla (pamietaj, zeby "next" tego nowego ustawic na null !).

0

innymi słowy chcesz napisać kolejkę:)

a z czym masz problem?

0

tak kolejke:) ogolnie to niezbyt rozumiem listy i wskazniki. zrobilem takie cos

struct ts_lista{
int ID;
ts_lista *prev, *next;}
*head=NULL;x=NULL;

int i=0,n=5;
while(i!=NULL)i++;
x=(ts_lista*)malloc(sizeof(ts_struct));
x->prev
ID=i;}

 

czy cos takiego. bylbym wdzieczny gdyby ktos poprawil ten mój wynalazek

pytanie nr 2 jak dziala rekurencja nie koncowa?

pozdrawiam i dziekuje za pomoc

0

Myślę, że niegłupim pomysłem byłoby przechowywać wskaźnik do ogona listy. Tym sposobem dodanie do końca listy kosztować będzie Cię tyle samo co dodanie do początku. Wyobraź sobie, że musisz przeskoczyć paręnaście tysięcy elementów, żeby dodać na koniec listy tylko jeden. ;)
To co robisz to wygląda na listę dwukierunkową, kolejkę możesz zaimplementować na pojedynczej, jeśli tak byłoby Ci łatwiej - właśnie przechowując wskaźniki do głowy i ogona listy.
Oczywiście nie będzie to tak wygodne jak w C++... ;)

0

najlepiej rozrysuj sobie na kartce z kwadracikami i strzałkami co dokładnie musisz zrobić ze wskaźnikami, żeby dodać/usunąć element, tak chyba najlepiej zrozumiesz

0

moze mozna na jedno keirunkowej ale mój wykladowca powie ze to rozwiazanie naiwne i - 5 pkt z kolosa. Nie wiem o co w tym chodzi bo na cwiczeniach mialem tylko jedno zadanie a te 2 zadal do domu i pewnie beda na kolosie, a na wykladzie jak wiadomo cos sie dowiedziec graniczy z cudem.
Więc proszę kogos milosiernego o napisanie tych 2 funkcji.

Czy ktos moze mi odpowiedziec jak dziala rekurencja niekoncowa? bo w google ciezko cos na ten temat znaleŹĆ.

dziekuje i pozdrawiam

0
dodanie na koniec lsity

struct lista{
int id;
lista *next;
*tmp;}

void dodaj(int id, lista *head){
lista *elem = new lista(); 
elem->id = id; 
elem->next = NULL; 
lista *tmp = head; 
while(*tmp->next) 
tmp = tmp->next; 
tmp->next = elem; }

pobieranie z poczatku
void pob(struct lista *head){
 struct lista *pom;
  while(*head!=NULL)
  {
    pom=(*head)->next;
    free(*head);
    *head=pom;
  }
}

wykladowca mowil niekoncowa, moze chodzi o nieogonowa. o neij tez duzo info mnie ma wiecej o ogonowej, moglby ktos na jakims prostym przykladzie wytlumaczyc?
pzodrawiam i dziekuje za kazda wskazowke

0

pomoze ktos?

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