首页 > 试题广场 >

已知模块类Hashtable支持get(key),set(k

[问答题]
已知模块类Hashtable<KeyT, ValueT>支持get(key),set(key,value)和delete(key)的操作,请使用该Hashtable作为唯一成员变量,实现一个栈(Stack)类,支持入栈(push)和出栈(pop)的操作。
请简单描述思路:
思路:模拟一个过程:入栈set(1,value),再入栈则set(2,value),出栈delete(2),其中存在的问题是还需要用一个成员变量来存储当前应该set的key值,由于题目要求只使用Hashtable作为成员变量,因此可以将该成员变量也储存到Hashtable中去,即set(0,对应的key)
入栈:int key =get(0)+1——找到此时应该增加的key值
set(key,value)
set(0,key)——修改0中的key值
出栈 int key =get(0)——找到此时应该删除的key值
delete(key)
set(0,key-1)——修改0中的key值
编辑于 2017-08-09 14:49:13 回复(0)
public class Stack<V>{
    private Hashtable<Integer,V> map = new Hashtable<Integer,V>();
    public V pop(){
        //查找map中最大的key值
       int max = Integer.MIN_VALUE;
        Iterator<Integer> iter = map.keySet().iterator();
        while (iter.hasNext()){
            max = Math.max(max,iter.next());
        }
        //删除key为max的记录
        V ans = map.get(max);
        map.delete(max);
        return ans;
    }
    public void push(V val){
        //查找map中最大的key值
       int max = Integer.MIN_VALUE;
        Iterator<Integer> iter = map.keySet().iterator();
        while (iter.hasNext()){
            max = Math.max(max,iter.next());
        }
        //添加key为max+1的记录
        map.set(max+1,val);  }
}

发表于 2017-03-20 09:20:01 回复(2)
class Main<E>{
    
    Hashtable<Integer,E> map = new Hashtable<>();
    
    // 记录栈顶的key
    int top = 0;
    void push(E data) {
        map.set(top++,data);
    }
    
    E pop() {
        E data = map.get(top);
        map.delete(top--);
        return data;
    }
    
}

发表于 2019-09-29 16:29:50 回复(0)
单例一个k=0;
push:  set(k+1,value>
pop:  { get(k,value);
             delete(k);
             k--;}
发表于 2019-03-14 22:35:20 回复(0)

思路:

HashTable一般有一个size()方法,返回当前key的个数。成员变量命名为 hashtable

push

  public void  push(T value){
    int len=hashtable.size();
    hashtable.put(len+1,value);
}

pop

public T pop(){
    int len=hashtable.size();
    V value=hashtable.get(len);
    hashtable.delete(len);
    return value;
}
发表于 2019-03-05 16:48:12 回复(0)
思路:使用null作为key作为链表的头节点,每个hashTable的key作为链表节点的值域,value作为next域。这里的hashTable不是java的hashTable(不能存null)。
class Stack{
    Hashtable<Object,Object> hashTable = new Hashtable<>();
    public Stack(){
        hashTable.set(null,null);
    }
    public void push(Object obj){
        if(obj == null){
            System.out.println("can not be null");
            return ;
        }
        Object value = hashTable.get(null);
        hashTable.set(obj,value);
        hashTable.set(null,obj);
    }
    public Object pop(){
        Object value = hashTable.get(null);
        Object next = hashTable.get(value);
        hashTable.delete(value);
        hashTable.set(null,next);
        return value;
    }
}
编辑于 2017-08-07 17:24:27 回复(0)