ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのスタック型のデータ構造問題

  • mixiチェック
  • このエントリーをはてなブックマークに追加
問題は以下の通りです。


スタックは「後入れ先出し(Last In First Out:LIFO)」型のデータ構造である。
任意の要素をスタックに1つずつ入れ、1つずつ取り出すことができる。
取り出しの順序は最後に入れたものが最初に取り出される。
スタックは大きさを持ち、格納できる要素数はその大きさまでとする。

●スタックの属性は以下のとおりとする。
stack // stack のデータ構造そのものである。型は問題毎に定義せよ。
int size; // スタックの大きさ
int top; // スタックの最上位(最後)の位置

●スタックの操作としてつぎのものを持つとする。
void push(Object anObject); //要素をスタックに入れる
Object pop(); //要素をスタックから取り出す
Object top(); // スタックの最後の要素を取り出す
boolean isEmpty(); // スタックが空の時に真、そうではない時に偽
boolean IsFull(); // スタックが満杯の時に真、そうではない時に偽
void show(); //スタックの内容を標準出力に出力する

以下において、スタックのクラス名はStack、テストプログラムのクラス名は
TestStack とし、名前の衝突が起きないように、パッケージ宣言を行うこと。
1と2のパッケージ名は Problem11.Answer1
3と4 のパッケージ名は Problem11.Answer2
とすること。

1. Stack を固定長配列を使って定義しなさい。
2. 1で定義したStack が要求を満たしていることをテストするプログラムTestStack を定義しなさい。
3. Stack を以下に定義するクラスCell を使って定義しなさい。
4. 3 で定義したStack が要求を満たしていることをテストするプログラムTestStack を定義しなさい。
5. 問題1 および3 において、どのような場合に何という例外が発生するか
(エラーメッセージにある例外クラス名とそのエラーが発生する状況の説明)を記述しなさい。エラー処理を定義している場合には、それを除いてチェックすること。
ただし、show メソッドにより、スタックが空の場合には「スタックは空です!」と表示し、
“a”,”b”,”c”の順序にスタックにつまれている場合にはスタックの内容を
c <-- b <-- a
と表示するようにする。



class Cell{
private Object element;
private Cell next;
Cell(Object element){
this.element = element;
}
public Object getElement(){
return element;
}
public Cell getNext(){
return next;
}
public void setElement(Object element){
this.element = element;
}
public void setNext(Cell next){
this.next = next;
}
public String toString(){
String s = "" + this.element;
if (this.next == null){
return s;
}
else {
return (s + " <-- " + (this.next).toString());
}
}
}

コメント(7)

上記の問1・2の途中までやったプログラミングが以下です。

// Stackクラス(固定長配列を使って定義)
public class Stack{
private int pos; // 次に要素が入る位置
private int top; // スタックの最上位の位置
private String size[] = new String[100]; // スタックの大きさ

Stack(){
this.pos = 0;
}
public String getsize(int index){
return this.size[index];
}

// 要素をスタックに入れる
public void push(String element){
this.size[pos] = element;
pos++;
}

// 要素をスタックから取り出す
public String pop(){
return size[--pos];
}

// スタックの最後の要素を取り出す
/* public String top(){}
*/

// スタックが空の時に真、そうではないときに偽
public boolean isEmpty(){
if(pos == 0){
return true;
}
else return false;
}

// スタックが満杯の時に真、そうでないときに偽
public boolean isFull(){
if(pos == size.length){
return true;
}
else return false;
}

public String toString(){
if(this.pos == 0) return ("スタックは空です");
String s = size[0];
for(int i=1; i < pos; i++){
s = size[i] + " <-- " + s;
}
return s;
}

// スタックの内容を出力する
public void show(){
System.out.println(this.toString());
}


}

public class TestStack{
public static void main(String[] args){
Stack s = new Stack(); //スタックの作成
s.show(); //初期状態
s.push("a");
s.push("b");
s.push("c");
s.pop();
s.push("d");
s.show();
}
}


問題のtopという変数をどう使ってやればよいのかがわからないです。また、
Object pop(); //要素をスタックから取り出す
Object top(); // スタックの最後の要素を取り出す
の違いもよくわかりません。

どなたかどうぞよろしくお願いいたします。
・問題文に「取り出しの順序は最後に入れたものが最初に取り出される。 」
とあるので「スタックの最後」とは、「最初に入れたもの」です。


・変数の定義で間違っています

private int size = 100; // スタックの大きさ
private Object[] stack; // stack のデータ構造そのものである。

Stack(){
stack = new Object[size];
this.pos = 0;
}

あくまで個人の想像の域を超えないのですが、
変数posが担っている役割を本来は変数topが担うべきなのでは??
問題を素直に読めば、2でなかのさんさんがおっしゃってることは正しいことなんですが、
問題文が誤植で、「最後に入れたもの」を「スタックの最後」と言ってしまってる気がします。

そうすれば、変数posが要らなくなって、
topの意味がはっきりとしてきます。
で、もしその解釈が正しいなら、
top()メソッドは、おそらくはスタックに「最後に入れたもの」の値を、
スタックから削除せずに取り出すメソッドでしょう。
peekなんて言うことが多いかと思うんですが、
スタックの先頭を削除せずにチラ見したくなることがよくあります。
どなたか問題を解いてくれる方いませんか??
お願いします。。。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング