找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 762|回复: 5

[求助] [求助]:Lisp怎样实现类似链表和二叉树这样的数据结构

[复制链接]
发表于 2005-2-3 13:07:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Lisp怎样实现类似链表和二叉树这样的数据结构

请高手多多指教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 10399个

财富等级: 富甲天下

发表于 2005-2-3 23:38:37 | 显示全部楼层
链表结构:
如表头变量=A1
A1=(X B1)
B1=(Y C1)
......
同理可得二叉树
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-4 10:15:21 | 显示全部楼层
A1=(X B1)
B1=(Y C1)
这样就可以赋值了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-4 14:52:31 | 显示全部楼层
lisp语法本身就是处理链表,已经实现了链表的很多操作
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-6 13:39:42 | 显示全部楼层
我想知道能不能在

表 '(a b c e) 中 插入一个 d 变成 '(a b c d e)

求一种在表的某个位置插入元素或表的通用做法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-2-6 23:09:52 | 显示全部楼层
最初由 sccat 发布
[B]我想知道能不能在

表 '(a b c e) 中 插入一个 d 变成 '(a b c d e)

求一种在表的某个位置插入元素或表的通用做法 [/B]


lisp很笨的
你不要想象c++一样,可以来去自如
比如要改变表中的元素,只能是重建一个(除了带索引的)
lst:'(a b c d)-->'(a e c d):
(append(list(car lst) e) (cddr lst))
也可以:
(cons(car lst) (cons e(cddr lst)))
还有其他办法

当然只是速度慢,基本想要的都能做到.

你要的加入一个元素,其实我上面方法变异一下就成.
(setq j -1)
(setq lst(mapcar '(lambda(x)(if(= 3(setq j(1+ j)))(list  e x)(list x)))lst))
(apply 'append lst)

好写个通用的:

  1. (defun list-add-n(lst n new / j)
  2.   (setq j -1)
  3.   (setq lst(mapcar '(lambda(x)(if(= n(setq j(1+ j)))(list new x)(list x)))lst))
  4.   (apply 'append lst)
  5. )
  6. ;;;exa:
  7. ;;;命令: (list-add-n '(1 2 3 4) 3 5)
  8. ;;;(1 2 3 5 4)


  1. (defun lsit-add-n1(lst n new / j lst1)
  2. (setq j 0)
  3. (foreach x lst
  4.   (if(= j n)(setq lst1(cons new lst1)))
  5.   (setq lst1(cons x lst1))
  6.   (setq j(1+ j))
  7. )
  8. (reverse lst1)
  9. )

当然方法很多,比如递归,自己考虑吧.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 15:25 , Processed in 0.178822 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表