/****************************************************************************** * Name: * NetID: * Precept: * * PList - Popularity List: Stack Version * list where the most recently accessed or added entry * is always on top. * * Dependencies: Entry, Stack, StdOut *****************************************************************************/ public class PList { // instance variables private Stack list; // stack of entries holds the whole list // constructor just initializes the empty list public PList() { list = new Stack(); } // add entry to top of list public void add(String name, String num) { Entry en = new Entry(name, num); list.push(en); } // output the list public void show() { if (list.isEmpty()) { StdOut.println("empty PList"); return; } // not empty, output the list for (Entry en : list) { StdOut.println(en); } } // move entry with name to top of list, return number // return null if not there public String find(String name) { // need a temp stack to hold onto other entries Stack temp = new Stack(); Entry found = null; // move everybody over to temp except your entry while (!list.isEmpty()) { Entry en = list.pop(); if (en.equals(name)) { // found it! remember it. found = en; } // not right name. save on temp and keep going else temp.push(en); } // replace list while (!temp.isEmpty()) { list.push(temp.pop()); } // Did we find it? if (found == null) return null; // put found on top list.push(found); return found.getNum(); } //remove and return Entry from list public Entry cut(String name) { // use find() to move Entry to top of list String found = find(name); if (found == null) throw new RuntimeException(name + "not found"); // return Entry and remove it from list return list.pop(); } // update num or add entry to list public void update(String name, String num) { // Is it already on list? String found = find(name); if (found != null) { // if there, cut it cut(name); } // either way, add new version add(name, num); return; } // test main public static void main(String[] args) { PList list = new PList(); list.add("Doug", "6092586314"); list.add("Donna", "6092581978"); list.add("Christopher", "6092585388"); list.add("Maia", "6092586484"); list.add("Chris", "6092582038"); StdOut.println("Entire list:"); list.show(); StdOut.println("==========================="); list.update("Maia", "6092588888"); list.cut("Chris"); StdOut.println("Doug " + list.find("Doug")); StdOut.println("Maria " + list.find("Maria")); StdOut.println("==========================="); StdOut.println("Updated list:"); list.show(); } }