さまざまなデータ構造(3)連結リスト2
こんにちは。前回に引き続き、今回も連結リストです。今回はいよいよプログラムです。
ちなみに、前の2回が関連するので「片方向リスト用のノード」、「連結リスト1」をご覧ください。
Javaのプログラム
Javaでプログラムを書いています。インスタンス変数として、先頭の要素を指し示すための矢印にあたるheadを用意しました。一つひとつのメソッドは前回の「連結リスト1」と同じ操作をJavaで書いているだけなので、考え方を知りたい場合には前回の投稿をご覧ください。
package data_structure;
public class MyLinkedList<E> {
private MyNode<E> head;
MyLinkedList() {
head = null;
}
public int size() {
int size = 0;
MyNode<E> tmp = head;
while (tmp != null) {
tmp = tmp.getNext();
size++;
}
return size;
}
public void add(int index, E element) {
MyNode<E> n = new MyNode<E>();
n.setElement(element);
if (index == 0) {
n.setNext(head);
head = n;
return;
}
MyNode<E> tmp = getNthNode(index - 1);
n.setNext(tmp.getNext());
tmp.setNext(n);
}
public void add(E element) {
add(size(), element);
}
public void set(int index, E element) {
getNthNode(index).setElement(element);
}
public E get(int index) {
return getNthNode(index).getElement();
}
public void remove(int index) {
if (index == 0) {
head = head.getNext();
return;
}
MyNode<E> tmp = getNthNode(index - 1);
tmp.setNext(tmp.getNext().getNext());
}
public String toString() {
String result = "";
for (MyNode<E> n = head; n != null; n = n.getNext()) {
result += n.toString();
}
return result;
}
private MyNode<E> getNthNode(int index) {
MyNode<E> result = head;
for (int count = 0; count < index; count++) {
result = result.getNext();
}
return result;
}
}
動作確認をするプログラム
上のプログラムで作ったMyLinkedListクラスが正しく動作するかを確かめるプログラムです。ひととおり確かめています。
package data_structure;
public class MyLinkedListExec {
public static void main(String[] args) {
MyLinkedList<String> list = new MyLinkedList<String>();
list.add("青森県");
System.out.println(list);
list.add("みやぎ県");
System.out.println(list);
list.add(0, "北海道");
System.out.println(list);
list.add(2, "岩手県");
System.out.println(list);
list.add("秋田県");
System.out.println(list);
list.set(3, "宮城県");
System.out.println(list);
System.out.println(list.get(1));
list.remove(1);
System.out.println(list);
list.remove(0);
System.out.println(list);
}
}
次回からは、ここで作った連結リストを使って別のデータ構造を作っていきます。今回はこれでおしまい。それではまた。
ディスカッション
コメント一覧
まだ、コメントがありません