2010-11-12 6 views
11

Puis-je avoir une structure de données de pile dans matlab?Matlab - Structure de données de pile

Par exemple une pile d'entiers où je peux y pousser des éléments comme stack.push(i), en retirer des éléments comme i = stack.pop() et vérifier si elle est vide stack.isempty().

+0

MATLAB a des capacités 'complètes' de POO. Il suffit d'écrire votre classe de pile. Voir la documentation pour MATLAB OOP: http://www.mathworks.com/help/techdoc/matlab_oop/ug_intropage.html – zellus

Répondre

18

Je ne pense pas que MATLAB en ait une même dans les versions les plus récentes. Mais vous pouvez utiliser Java, c'est un "citoyen de première classe" dans MATLAB, cela fonctionnerait parfaitement avec les entiers comme vous en avez besoin. Voir aussi queue et linked-list questions connexes. Il suffit d'écrire dans MATLAB stack=java.util.Stack() et puis vous pouvez call methods on it comme dans votre question stack.push(i), ecc.

+2

Soyez juste très prudent avec les conversions de type de données. –

+3

@Andrey Cela m'a juste mordu - j'ai poussé un vecteur de ligne dans une pile et quand je l'ai fait éclater, il est sorti comme un vecteur de colonne. –

5

Vous pouvez rouler le vôtre ou utiliser celui de quelqu'un d'autre, par exemple this. Une pile faite maison très simple serait un tableau avec un compte, le compte pointant vers l'article le plus haut.

+0

Mais matlab n'en a-t-il pas déjà un que je puisse utiliser? – Simon

+1

Jack, je n'en ai pas trouvé un. – Skurmedel

+0

@Jack - Autre que Java, non. – Marc

1

J'ai utilisé Java dans MATLAB et honnêtement c'est très lent. Il est préférable de faire ce que @skurmedel dit, comme ceci:

Ptr = 1; 
Stack(ptr,:) = [x,y]; 
Ptr = ptr + 1; 

Et pour simuler pop:

A = stack(ptr,1); 
B = stack(ptr,2); 
Ptr = ptr - 1; 
Questions connexes