请教一个算法,希望给出主要代码。
现在我有一个对象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;
现在我有一个对象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;
楼主【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%
值得尊敬
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);
}
}
如果只是一个叶子,当然没问题,加1就好了;
但如果添加的本身就是一颗子树,那就要用递归给子树每个的节点level都加1,但他内部储存是用Stack,这样操作的话…………
总之问题多多,不知道他为什么要level这个变量