2009-09-07 6 views
0

Ce que je veux arriver est la fonction pushFront (int) pour le faire:C++ Stack Tableau mise en œuvre

 
bool stack::pushFront(const int n) 
{ 
    items[++top] = n; // where top is the top of the stack 
    return true; // only return true when the push is successful 
} 

articles est un type struct de l'objet "item". Jetez un coup d'oeil:

 
class stack 
{ 
    stack(int capacity); 
    ~stack(void); 
    ... 
    private: 
    int maxSize; // is for the item stack 
    int top;  // is the top of the stack 
    struct item { 
    int n; 
    }; 
    item  *items;    

j'ai défini le cteur à l'objet de classe de la pile et dtor comme suit:

 
stack::stack(int capacity) 
{ 
    items = new item[capacity]; 

    if (items == NULL) { 
     throw "Cannot Allocoate Sufficient Memmory"; 
     exit(1); 
    } 
    maxSize = capacity; 
    top  = -1; 
} 

stack::~stack(void) 
{ 
    delete [] items; 

    items = NULL; 
    maxSize = 0; 
    top  = -1; 
} 

Oui la question principale pour moi est les articles [++ haut] = n ; déclaration. J'ai essayé de trouver des façons de contourner comme ci-dessous:

 

bool stack::pushFront(const int n) 
{ 
    int *a = new int[maxSize]; 
    a[++top] = n; 

    return true; 
} 

Mais je ne peux pas glisser (+) « a » tableau pour voir les éléments du tableau réels ... Ce qui est ce que j'espérais arriver.

Ce que je veux c'est pour les éléments d'instruction [++ top] = n; pour travailler ..

Répondre

0
bool stack::pushFront(const int n) 
{ 
    if(top == maxSize-1) 
     return false; 
    items[++top].n = n; // where top is the top of the stack 
    return true; // only return true when the push is successful 
} 
0

Il semble que vous ayez défini une pile de taille fixe. Vous devriez vérifier que l'ajout à la pile ne dépasse pas la taille. Pour pushFront, il vous suffit de copier les données dans le tableau pour faire place à l'élément 0e à modifier:


bool stack::push(const int n) 
{ 
    if (top >= capacity-1) return false; 
    items[++top].n = n 
} 

bool stack::pushFront(const int n) 
{ 
    if (top >= capacity-1) return false; 
    bcopy(items, items+1, top+1); 
    items[0].n = n; 
    return true; 
} 
+0

En fait, les éléments de l'état [++ haut] = n; dans le corps de la pile bool :: fonction pushFront (const int n), est invalide et je reçois cette erreur: erreur C2679: binaire '=': aucun opérateur trouvé qui prend un opérande de droite de type 'const int' (ou il n'y a pas de conversion acceptable). Suivi par: pourrait être 'stack :: item & pile :: item :: opérateur = (const pile :: item &)' Comment puis-je m'en sortir en écrivant le code comme éléments [++ top] = n; ? – user40120

+0

partout j'utilise des éléments comme un tableau assigné à n, j'obtiens une erreur:/ – user40120

+0

Comme Geerad l'a souligné, il devrait être: éléments [++ top] .n = n; parce que les éléments sont une structure. –

2

Vous ne pouvez pas affecter une valeur int à un élément, parce que vous ne l'avez pas dit la compilateur comment faire cela.

Vous devez soit écrire un constructeur ou opérateur = pour l'élément qui prend un int en tant que paramètre ou utilisez

items[++top].n = n;