Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C#] Implementacja stosu(dynamicznych struktur danych)

Ostatnio zmodyfikowano 2013-07-21 17:44
Autor Wiadomość
lasotaa
Temat założony przez niniejszego użytkownika
[C#] Implementacja stosu(dynamicznych struktur danych)
» 2013-07-20 19:40:00
Witam, otóż mój problem to jak zaimplementować klase, albo strukturę odpowiedzialną za działanie stosu w c sharp. W c++ wygląda to tak,
nie chcę używać żadnych bibliotek.
C/C++
struct STOS
{
    int zmienna;
    STOS * next;
};
void dodaj( STOS *& glowa, int x )
{
    STOS * pom = new STOS;
    pom->zmienna = x;
    pom->next = glowa;
    glowa = pom;
}
void usuwanie( STOS *& glowa )
{
    STOS * pom = glowa;
    glowa = glowa->next;
    delete pom;
}
natomiast w C-sharp gdy próbowałem wdrążyć:
C/C++
using System;
struct Dodaj
{
    int a;
    Dodaj * next;
};
taki kod to wyskakiwał mi błąd, lini:
C/C++
Dodaj * next;
P-88444
m4tx
» 2013-07-20 19:50:15
taki kod to wyskakiwał mi błąd
Raczej nie ma co liczyć na to że ktoś pomoże dopóki nie napiszesz co to za błąd. Zwłaszcza, że niewiele osób zna tu C#.

Co do problemu:
http://stackoverflow.com​/questions/3590519​/object-pointer-in-c
http://www.c-sharpcorner.com​/UploadFile/pcurnow​/usingpointers10022007082330AM​/usingpointers.aspx

Koniecznie musisz mieć to
next
 jako wskaźnik?
P-88445
lasotaa
Temat założony przez niniejszego użytkownika
» 2013-07-20 19:52:25
Error1 Pointers and fixed size buffers may only be used in an unsafe context
nie, ale z c++ przyzwyczajenie.
P-88446
lasotaa
Temat założony przez niniejszego użytkownika
» 2013-07-20 20:09:14
trochę twoje linki pomogły, ale dalej ciężko mi wymyślić jak zrobić , żeby stworzyć strukturę w której wewnątrz będzie (zmienna)wskaźnik która będzie przechowywała adres kolejnej struktury. Tutaj znalazłem i właśnie go analizuję
http://www.algorytm.org​/klasyczne/stos/stos-1-cs.html
ale prosiłbym kogoś, o pomoc w prostszej implementacji, oraz żeby pomógł mi zrobić to za pomocą struktury.
P-88448
m4tx
» 2013-07-20 22:22:42
nie, ale z c++ przyzwyczajenie.
Jak Ci niepotrzebne wskaźniki to je wywal. Powinno być ok bez nich.
P-88453
Mrovqa
» 2013-07-20 22:41:20
W C# nie ma wskaźników, są referencje.
C/C++
using System;
class Dodaj
{
    int a;
    Dodaj next;
};

// Tworzenie lancucha:
Dodaj a = new Dodaj();
a.a = 1;
a.next = new Dodaj();
Dodaj b = a.next; // wskazuje na to samo - referencja!
Tutaj jednakże trzeba uważać - wprawdzie klasy są przekazywane przez referencję i znajdują się na stercie, jednakże struktury są traktowane inaczej - są przekazywane przez wartość i znajdują się na stosie. Kwestia tego, że gdybyś w powyższym kodzie zastosował strukturę, odpowiadałoby to czemuś takiemu w C++:
C/C++
class A
{
    int a;
    A next;
};

Edycja: @down mój błąd. Nie pamiętam gdzie znalazłem te błędne informacje, ale wszystko na co się dotychczas natknąłem (a natknąłem się na wiele) negowało tudzież milczało o istnieniu wskaźników. Z resztą na MSDNie jest umieszczony razem z niebezpiecznym kodem w jednej kategorii, co oznacza, iż nawet MS niezbyt zaleca ich stosowanie. Referencja moim zdaniem jest wystarczająca - to w końcu też wskaźnik (choć może zdarzą się wyjątki optymalizacyjne), tyle, że zamaskowany.
P-88457
m4tx
» 2013-07-20 22:58:43
W C# nie ma wskaźników
Przeczytaj jeszcze raz to, co napisałeś, a jeśli dalej nie będziesz wiedział o co chodzi, to zobacz sobie to:
http://msdn.microsoft.com​/en-us/library/y31yhkeb.aspx

Referencja moim zdaniem jest wystarczająca - to w końcu też wskaźnik (choć może zdarzą się wyjątki optymalizacyjne), tyle, że zamaskowany.
No nie wiem.
C/C++
void foo( int a )
{
    // [...]
}

void bar()
{
    int a = 5;
    foo( a );
    System.Console.WriteLine( a );
}
Zmodyfikuj ciało funkcji foo() tak, aby na standardowe wyjście wypisane zostało nie 5, a 10. Tak, nie da się.

Rzecz jasna tutaj nie używamy referencji - przykład miał za zadanie jednak pokazać, że czasami bez wskaźnika będzie ciężko.
P-88459
Mrovqa
» 2013-07-20 23:21:18
@m4tx Typy elementarne są przekazywane przez wartość, chyba, że zastosujesz słowo kluczowe ref tudzież out.
P-88462
« 1 » 2
  Strona 1 z 2 Następna strona