菜鸟请教:如何用汇编语言表达链式存储结构

masmaster 2010-08-09 01:40:08
顺序表存储结构可以用数组来表示。那么链表呢?
...全文
64 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
masmaster 2010-08-10
[Quote=引用 9 楼 delphiguy 的回复:]
用struct定义的是链表的节点哪。
一个链表可以有多个节点:
n1 node<1,0,offset n2>
n2 node<2,offset n1,offset n3>
n3 node<3,offset n2,offset n4>
...

n1、n2、n3... 是不必物理相连的。
[/Quote]
感谢回复。学习一下结构先。
回复
node struct
data dd ?
prev dd ?
next dd ?
node ends

这里定义的,data是一个节点存储的数据,prev是指向前一个节点的指针,next是指向后一个节点的指针。
回复
用struct定义的是链表的节点哪。
一个链表可以有多个节点:
n1 node<1,0,offset n2>
n2 node<2,offset n1,offset n3>
n3 node<3,offset n2,offset n4>
...

n1、n2、n3... 是不必物理相连的。

回复
九度空间 2010-08-10
楼主 你咋学上汇编了呢
珍惜生命 远离汇编
回复
masmaster 2010-08-10
书里这么说的
【线性表的链式存储结构是一组地址任意的存储单元(这些存储单元可以是连续的也可以是不连续的)一次存储线性表中的各个数据 元素。 数据元素存储在链节点中,链结点由数据域和指针域组成。】
回复
masmaster 2010-08-10
[Quote=引用 5 楼 delphiguy 的回复:]
类型定义:
node struct ; TASM只认struc关键字,不认struct,MASM认为二者是一样的。
data dd ?
prev dd ?
next dd ?
node ends

初始化实例:
n1 node<>
或者 n1 node<1,2,3>

访问:
; assume edi: ptr node
lea edi,n1
mov eax,1
m……
[/Quote]
感觉这个结构还是顺序存储的。书里说链式存储结构不要求物理位置上的相邻。例如:
stra db 1,2
org 10h
strb db 3
org 20h
strc db 4,5,6
这三个变量在物理位置上是不响铃的,如何把它们生成逻辑上的一个结构呢?
回复
类型定义:
node struct ; TASM只认struc关键字,不认struct,MASM认为二者是一样的。
data dd ?
prev dd ?
next dd ?
node ends

初始化实例:
n1 node<>
或者 n1 node<1,2,3>

访问:
; assume edi: ptr node
lea edi,n1
mov eax,1
mov [edi].data,eax
; assume edi: nothing
或者:
mov n1.data,eax ; MASM似乎通过不了,TASM可以
回复
masmaster 2010-08-09
[Quote=引用 1 楼 delphiguy 的回复:]
同高级语言类似,用struct。
[/Quote]
老大, 能给个例子嘛? 多谢!
回复
xy_zhang 2010-08-09
[Quote=引用 2 楼 xy_zhang 的回复:]

C/C++ code
struct AAA {
DATA data;
struct AAA* next;
}
[/Quote]

没看到是汇编,隐过……

在数据域最后放一个标记,指向下一个数据
回复
xy_zhang 2010-08-09
struct AAA {
DATA data;
struct AAA* next;
}
回复
同高级语言类似,用struct。
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告