Dynamiczna tablica

0

Chciałbym zrobić listę (jednowymiarową więc), która nie ma z góry określonego rozmiaru, nowy element dodawałoby się z pomocą funkcji List_Add(nazwa listy, wartość). Ma ktoś jakiś pomysł? Szukałem trochę na Google, ale przykłady były jakieś niezrozumiałe [???] , dotyczyły tablic wielowymiarowych...

EDIT:
ojojoj, trochę skomplikowane to wszystko, chyba jednak wrócę do podstaw :/

0

dynamiczna alokacja pamięci o 1 element wiekszej operatorem new, wywalanie starej tablicy deletem i podmiana adresow pod wskaznikami :]

0

A może Vector?

1
struct Node
{
  Node* next;
  int val;
};

void push(Node*& lista,int wartosc);
int pop(Node*& lista);

Wersja minimum.

@rapson48 weź ty chłopie naucz się najpierw porządnie czegoś a potem podpowiadaj innym ;) znasz takie słowo jak optymalność?

0

O liscie jednokierunkowej jest tutaj http://pl.wikipedia.org/wiki/Lista - to co przedstawia shalom

0
Shalom napisał(a)

...
@rapson48 weź ty chłopie naucz się najpierw porządnie czegoś a potem podpowiadaj innym ;) znasz takie słowo jak optymalność?

poki smiga nie martwie sie o to ;]

0

Tja, póki śmiga i zajmuje więcej niż wersja z sensowną złożonością... Weź się zastanów bo z jednej strony piszesz jaki to C++ jest prosty i logiczny, z drugiej kolejny raz dajesz przykład jak maksymalnie kod spierdolić.

0

[q:ciaaaach]

A jak chcesz być pomocny to może znasz asm'a i jakieś kursy dobre oprócz -> http://rudy.mif.pg.gda.pl/~bogdro/index.php <- ?

0
rapson48 napisał(a)

A co do mojej umiejętności korzystania z ramu... uważam że jest ok ;] chociaz na pewno mogę to jeszcze zoptymalizowac :]

Tak się składa, że tablica mniej pamięci zużywa niż lista o takiej samej liczbie elementów. Aha, i obecnie (od kilkunastu lat) pamięć ma niewiele wspólnego z RAMem...

rapson48 napisał(a)

A jak chcesz być pomocny to może znasz asm'a i jakieś kursy dobre oprócz -> http://rudy.mif.pg.gda.pl/~bogdro/index.php <- ?

http://www.intel.com/products/processor/manuals/ - manuale Intela, wystarczające do wszystkiego. Jak lubisz bajki na dobranoc to http://re.coldwind.pl/ i odcinki ReverseCraft Assember pooglądaj. I tak najlepszy sposób nauki asma to godziny nad debuggerem i zabawy z optymalizacją pod kątem szybkości/rozmiaru... ew. cracking.

0

@rapson48 nie zrzucaj winy na osoby które cię krytykują, bo wina jest po twojej stronie. Piszesz głupoty i wprowadzasz kogos w błąd więc nie dziw się ze ktoś to koryguje. Niektórzy korygują to w bardziej lub mniej dobitny sposób, ich sprawa. Zanim zaproponujesz komuś jakieś rozwiązanie zastanów się po prostu czy jest tego warte. Znasz się na programowaniu słabo (co widać po twoich poprzednich postach), więc nie ma sensu robić z siebie "wymiatacza" na siłę, bo nic z tego nie będzie.
Napisz trochę wartościowych postów (możesz się wzorować na postach @bswierczynski czy @quetzalcoatl czy też wielu innych userów) i ludzie cię docenią ;)

1

@up: manuale intela
W sumie autor nie powiedzial, ze ma byc w C++ ;]

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

typedef struct el {
     int val;      /* mozna dac wiecej elementow :D */
     struct el *next;
} el;

el *first = NULL;

void add_list(el *ptr, int val)
{
  el *new;

  new = (el*)malloc(sizeof(el));
  new->val = val;
  new->next = NULL;
  
  if(ptr == NULL)
    first = ptr;
  else
  {
     while(ptr->next != NULL) ptr = ptr->next;
     ptr->next = NULL;
  }
}

void print(el *ptr)
{
   while(ptr != NULL)
   {
       printf("%d\n", ptr->val);
       ptr = ptr->next;
   }
}

int main(void)
{
  add_list(first, 20);
  add_list(first, 20);
  add_list(first, 20);
  add_list(first, 20);
  add_list(first, 20);
  add_list(first, 20);

  print(first);

  return 0;
}

proste, a jakie optymalne ;)

0

Sprostowanie...

Kurcze, tam w else przy add_list powinno byc

ptr->next = new; /* zamiast NULL :( */

i co do tego @up, to powinno byc @up-2

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