2015-03-26, 22:19
  #1
Medlem
Hej allesamman!
Jag måste lösa dessa 2 uppgifter och jag hittar varken information gällande dessa frågor någonstans på nätet eller i läroboken.

Första uppgift handlar om Stacken och Heapen.
1. Förklara: hur man lägger till och tar bort värden på dem.

Jag vet här vad Stacken och Heapen är, så det behöver jag inte några förklaring på.
Jag vet också att man kan använda sig av metoden push och pop för att lägga till och ta bort från Stacken.
Men hur gör man om man vill få bort något från Heapen?
Samt kan någon visa ett exempel på pop och push ?

Till min nästa fråga:

2.Hur krävande är minneshanteringen för sorteringsalgoritmer?
Jag kan generellt de olika typ sorteringsalgoritmer, vet hur dessa fungerar.
Men hittar överhuvudtaget inte hur de påverkar eller kräver minnensarbete.

Tacksam för allsvar på förhand
Mvh, Stazze
Citera
2015-03-26, 22:46
  #2
Medlem
1. http://www.brpreiss.com/books/opus6/html/page362.html

Google är din vän men sök på engelska
Citera
2015-04-13, 17:55
  #3
Bannlyst
Kanske sen, men jag hade tråkigt

När du skapar en klass, t.ex.
Kod:
MyClass myclass;
så deklareras en pekare som heter "myclass" och är av typen MyClass.
När du sedan skriver
Kod:
myclass = new MyClass();
så kommer ett MyClass objekt skapas på heapen och variabeln myclass kommer peka på den. "myclass" kommer inte vara objektet, utan peka på objektet.
I sin stur betyder detta att när du skickar myclass till en metod:
Kod:
...kod...
myclass = new MyClass();
metod1(myclass);
metod2(myclass);
metod3(myclass);
...osv...

Metod1 (eller andra) kan se ut så här:
public void metod1(MyClass value)
{
   MyClass mc = value;
   value.val = 2;
}
Då kommer metod1 och övriga metoder som tog emot "myclass" inte få en kopia av objektet, utan en kopia av pekaren. Det betyder att om metod1 ändrar variabeln "val" i "value", så kommer det även ändra myclass.

En annan exempel:
Kod:
//Säg att någon vill fylla en array med MyClass så att arrayen inte blir NULL
//Du kan tänka att MyClass är en "person" som ska läggas i en "kontaktbok", eller nåt
MyClass mc = new MyClass();
MyClass[] mcarray = new MyClass[100];
for(int a = 0; a < 100; a++)
{
    mcarray[a] = mc;
}

Okej, nu innehåller arrayen inget NULL så det är dags att lägga till personer i kontaktboken
Kod:
MyClass temp = mcarray[0]; //Ändra första personen i kontaktboken
temp.namn = "Anna Jihad";
temp = mcarray[1]; //Nästa person...
temp.namn = "Stefan Smiley";
..osv till sista...
temp = mcarray[99];
temp.namn = "John Doe";
Oops! Nu kommer mcarray[0] till mcarray[99] alla heta "John Doe" eftersom alla 100 platser i arrayen pekar till en och samma objekt som befinner sig på heapen.

För att få bort nåt från heapen så måste man göra sig av med alla pekare som pekar på objektet. I sista fallet så skulle vi behöva sätta mcarray = NULL; och mc = NULL; och då skulle objektet tas bort från heapen.

Stacken är lite svårare att förklara, men kortfattat så hamnar int, double, string, etc där och när man gör som jag skrev längre upp med "metod1" "metod2" osv men ersätter "MyClass value" med "int value" (eller liknande) så kommer en riktigt kopia av objektet skickar till metoderna och så fort metoden är klar kommer metodens kopia försvinna för evigt såvida man inte skickar vidare den till en annan metod.

Bäst att läsa här:
Heap och stack
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in