请教一个算法,希望给出主要代码。
现在我有一个对象A,A中有一个堆栈对象_Stack,有一个方法add;还有一个接口B,B中也有一个堆栈对象_Stack,有一个属性表示当前层次。我实例一个对象_A,使用add函数添加一个对象B的实例,实例保存在A中的_Stack对象中,所有对象都是保存在_Stack中。最终形成一个链(如下图): 
_B(第一层)----_B(第二层) 
         | 
         |---_B(第二层)-----_B(第三层) 
         | 
         |----_B(第二层)-----_B(第三层))-----_B(第四层) 
         | 
         |----_B(第二层)-----_B(第三层)-----_B(第四层) 
补充: 
第二层的所有对象在一个第一层的_Stack中,第三层的所有对象在一个第二层的_Stack中,每次操作都是取最后一个对象;比如取第二层的数据就是取第二层的最后一个_B对象,同时也是把它所有下层全部取出,应为是堆栈管理; 现在我想实现的方法是: 
一、setChild(Object _Object);实现功能:在_Object中的层次中插入对象_Object,并将链对象保存在A中的_Stack; 
二、getChild(int layer);实现功能:获取指定层次的最后一个对象,并在链中清除这个对象,将对象保存在A中的_Stack; 
三、getLastChild();实现功能:获取链中最后插入的对象,并在链中清除这个对象,将对象保存在A中的_Stack;

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【coolingwind】截止到2008-07-23 21:23:48的历史汇总数据(不包括此帖):
    发帖的总数量:20                       发帖的总分数:520                      每贴平均分数:26                       
    回帖的总数量:15                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:19                       结贴的总分数:420                      
    无满意结贴数:12                       无满意结贴分:740                      
    未结的帖子数:1                        未结的总分数:100                      
    结贴的百分比:95.00 %               结分的百分比:80.77 %                  
    无满意结贴率:63.16 %               无满意结分率:176.19%                  
    值得尊敬
      

  2.   

    http://blog.csdn.net/carefree31441
      

  3.   

    import java.util.Vector;
    import javax.swing.JFrame;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;class A{
    private Vector _stack;

    public void push(B b){//既你所谓的add,堆栈中用push添加
    _stack.add(b);
    }

    public B pop(){ //堆栈弹出一个对象,并删除
    B tmp = (B)_stack.get(_stack.size() - 1);
    _stack.remove(_stack.size() - 1);
    return tmp;
    }
    }public class B { public static int totals; //当前所有的B的个数,用于获取最后一个,注意是全局变量
    private Vector _stack; //堆栈
    int layer = 1; //层(默认为1)
    private int position; //标示第几个添加到B中的,用于获取最后一个

    public B(){
    _stack = new Vector();
    }

    public void setLayer(int l){ //
    this.layer = l;
    }

    /**
     * 获取该B的层次
     * @return
     */
    public int getLayer(){
    return this.layer;
    }

    /**
     * 添加一个B
     * @param stackObj
     */
    public void addChild(B stackObj){
    _stack.add(stackObj);
    stackObj.setLayer(this.getLayer() + 1);
    position = ++totals;

    }

    public Vector getStack(){
    return _stack;
    }

    public int getCount(){
    return _stack.size();
    }

    /**
     * 获取某一层的最后一个节点,并删除
     * @param layer
     * @return
     */
    public B pop(int layer){
    int i = 0;
    B tmp ;
    Vector parent = null;
    B rtn = this;
    while(i < layer){
    parent = rtn.getStack();
    tmp = (B)parent.get(rtn.getCount() - 1);
    rtn = tmp;
    i++;
    }
    parent.remove(rtn);
    return rtn;
    }

    /**
     * 获取某一层的最后一个节点,不删除
     * @param layer
     * @return
     */
    public B getChild(int layer){
    int i = 0;
    B tmp ;
    B rtn = this;
    while(i < layer){
    tmp = (B)rtn.getStack().get(rtn.getCount() - 1);
    rtn = tmp;
    i++;
    }
    return rtn;
    }

    /**
     * 返回最后添加的B
     */
    public B getLastChild(){
    //遍例所有B,查找b的position == totals
    //然后totals--,(假设添加了16个B,获取最后一个并删除后,那么第15个添加的就成了最后一个)
    //未实现,呵呵有点晚了
    return null;
    }

    /**
     * 树形化这个堆栈的结构,方便view
     * @return
     */
    public JTree buildTree(){
    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
    for(int i=0 ; i<_stack.size(); i++){
    B b = (B)_stack.get(i);
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(b);
    root.add(node);
    parseStackTOTreeNode(node, b);
    }
    return new JTree(root);
    }

    private void parseStackTOTreeNode(DefaultMutableTreeNode node, B b){
    Vector stack = b.getStack();
    if(null == stack || stack.isEmpty()){
    return;
    }
    for(int i=0; i<stack.size(); i++){
    B tmp = (B)stack.get(i);
    DefaultMutableTreeNode tmpNode = new DefaultMutableTreeNode(tmp);
    node.add(tmpNode);
    parseStackTOTreeNode(tmpNode, tmp);
    }
    }



    public static void main(String[] args){
    B b = new B();//生成b
    b.addChild(new B());
    b.addChild(new B());

    B layer1 = b.getChild(1);
    layer1.addChild(new B());
    layer1.addChild(new B());

    B layer2 = b.getChild(2);
    layer2.addChild(new B());
    layer2.addChild(new B()); B obj = b.pop(2);

    A a = new A();
    a.push(obj);

    //看一看结果吧
    JFrame f = new JFrame();
    f.getContentPane().add(b.buildTree());
    f.setSize(300,400);
    f.setVisible(true);
    }
    }
      

  4.   

    其实这有个问题,在addChild(B)方法对于level这个变量该如何设置的问题,
    如果只是一个叶子,当然没问题,加1就好了;
    但如果添加的本身就是一颗子树,那就要用递归给子树每个的节点level都加1,但他内部储存是用Stack,这样操作的话…………
    总之问题多多,不知道他为什么要level这个变量