// // 単方向リストによる辞書 // // 2001/ 8/ 5 宍戸 輝光 import java.awt.*; import java.awt.event.*; class DItem { // 項目クラス String stKey,stValue; DItem diNext; DItem(String st1,String st2) { stKey=st1; stValue=st2; } String getKey() { return stKey; } String getValue() { return stValue; } DItem getNext() { return diNext; } void setNext(DItem di1) { diNext=di1; } } class DList { // 項目リストクラス DItem diFirst,diLast; boolean add(String st1,String st2) { // リスト末尾に項目追加 if (st1.length()<1) return false; if (diFirst==null) { diFirst=new DItem(st1,st2); diLast=diFirst; } else { DItem diWrk=new DItem(st1,st2); diLast.setNext(diWrk); diLast=diWrk; } return true; } String search(String stKey) { // 指定されたキーで項目の値を検索 String stWrk=new String(); DItem diWrk=diFirst; while(diWrk!=null) { if (stKey.equals(diWrk.getKey())) { stWrk=diWrk.getValue(); return stWrk; } diWrk=diWrk.getNext(); } return stWrk; } boolean delete(String stKey) { // 項目削除 if (diFirst==null) return false; DItem diWrk=diFirst,diPrev=diFirst; if (stKey.equals(diWrk.getKey())) { if (diLast==diWrk) { diFirst=null; diLast=null; return true; } diFirst=diWrk.getNext(); return true; } diWrk=diWrk.getNext(); while(diWrk!=null) { if (stKey.equals(diWrk.getKey())) { if (diWrk==diLast) diLast=diPrev; diPrev.setNext(diWrk.getNext()); return true; } diPrev=diWrk; diWrk=diWrk.getNext(); } return false; } DItem getFirst() { // リスト内の最初の項目への参照を返す return diFirst; } } public class Listdic extends java.applet.Applet implements ActionListener { DList dlData; TextField tfKey,tfValue,tfSearch,tfRes; Button btAdd,btSearch,btDelete; TextArea taView; Panel pnAdd,pnSearch,pnView; public void init() { tfKey=new TextField(8); tfValue=new TextField(8); tfSearch=new TextField(8); tfRes=new TextField(8); btAdd=new Button("A d d"); btAdd.addActionListener(this); btSearch=new Button("S e a r c h"); btSearch.addActionListener(this); btDelete=new Button("D e l e t e"); btDelete.addActionListener(this); taView=new TextArea(24,48); pnAdd=new Panel(); pnAdd.add(new Label("Key")); pnAdd.add(tfKey); pnAdd.add(new Label("Value")); pnAdd.add(tfValue); pnAdd.add(btAdd); pnSearch=new Panel(); pnSearch.add(new Label("Key")); pnSearch.add(tfSearch); pnSearch.add(btSearch); pnSearch.add(btDelete); pnSearch.add(tfRes); pnView=new Panel(); pnView.add(taView); add(pnAdd); add(pnSearch); add(pnView); dlData=new DList(); } void drawData() { String stWrk=new String(); DItem diWrk=dlData.getFirst(); while(diWrk!=null) { stWrk+=diWrk.getKey()+" - "+diWrk.getValue()+"\n"; diWrk=diWrk.getNext(); } taView.setText(stWrk); } public void actionPerformed(ActionEvent e) { if (e.getSource()==btAdd) { // Addボタンクリックイベント dlData.add(tfKey.getText(),tfValue.getText()); drawData(); } if (e.getSource()==btSearch) { // Searchボタンクリックイベント tfRes.setText(dlData.search(tfSearch.getText())); } if (e.getSource()==btDelete) { // Deleteボタンクリックイベント dlData.delete(tfSearch.getText()); drawData(); } } }