/******************************************************************************
* 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<Entry> list; // stack of entries holds the whole list
// constructor just initializes the empty list
public PList() {
list = new Stack<Entry>();
}
// 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<Entry> temp = new Stack<Entry>();
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();
}
}