论坛或者帖子树状展开解决方案-堆栈

展开树状记录的程序很多是采用递归算法。我們知道,递归的方法逻辑比较简单,实际操作起来比较容易。但是递归有一个最大的缺点就是占用资源太多,速度太慢。如果在互联网的"论坛"上采用此种方法,在表记录很多的情况下将是一个非常严重的问题。我们可以用堆栈来解决递归效率低下占用资源的问题。

一、表结构(article)
  tpId int 本记录ID号
  tpPid int 父记录ID号
  title varchar 贴子标题
  author varchar 贴子作者
  datetime date 发贴日期时间
isLeaf int 是否叶子(没有子贴)
  ..... 根据具体的情况我们还可以有更多的字段
二、操作方法
  (1) 首先,我们读出所有父结点为"0"的记录也就是"主贴",统统放入堆栈中。
(2) 然后,输出位于栈顶的一条记录("主贴")数据,并清空栈顶,栈頂下移一格。
(3) 接着,查找所有父结点为该栈项结点("主贴")的记录("回贴"),也统统放于栈顶。
注意到没有,就这两步我们就完成了把一条父记录输出并展开其子结点的工作。余下的工作只是依次类推而已了,直到栈为空为止。
  
三 代码简要整理.
/** 速度很快的堆栈显示帖子*/
public void stackShow(String id) {
/** 堆栈*/
StackUtil s = new StackUtil(1000);

/** 读出所有父结点为"0"的记录也就是"主贴",统统放入堆栈中*/
String pageHql = HqlUtil.getHql("Topic", "tpPid", id);
List l = topicDAO.getRecordsByHql(pageHql, id, null);
System.out.println("l.size=" + l.size());
for (int i = 0; i < l.size(); i++) {
Topic t = (Topic) l.get(i);
System.out.println("id=" + t.getTpId());
s.push(t);
}

/** 输出栈顶元素直到栈为空*/
while (!s.isEmpty()) {

/** 输出位于栈顶的一条记录("主贴")数据,并清空栈顶,栈頂下移一格*/
Topic t = s.Pop();
System.out.println("top=" + s.getTop());
System.out.println("id=" + t.getTpId());

/** 查找所有父结点为该栈项结点("主贴")的记录("回贴"),也统统放于栈顶*/
String pageHql2 = HqlUtil.getHql("Topic", "tpPid", t.getTpId());
List l2 = topicDAO.getRecordsByHql(pageHql, t.getTpId(), null);
Iterator iter = l2.iterator();
while (iter.hasNext()) {
Topic t2 = (Topic) iter.next();
s.push(t2);
}
}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值