直接寻址编程例题的解答如下:
假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少? 答案:
遍历整个寻址表T,时间O(m)。
位向量 (bit vector)是一种仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少得多。请说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的动态集合。字典操作的运行时间应是O(1)。
答案: 1表示该下标的整数在数组中,0表示不在。
试说明如何实现一个直接寻址表,表中各元素的关键字不必都不相同,且各元索可以有卫星数据。所有三种字典操作( INSERT、DELETE 和SEARCH )的时间应为O(1)。(不要忘记 DELETE 要处理的是被刪除的对象的指针变量,而不是关键字。)
答案: 每个 key 指向一个列表。我们希望通过利用在一个 非常大 的数组上直接寻址的方式来实现一个字典。开始时,该数组中可能包含一些无用信息,但要对整个数组进行初始化是不实际的。因为该组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储的对象占用O(1)空间;SEARCH、INSERT 和DELETE 的时间为O(1),并且对数据结构初始化的时间为 O(1)。(提示:可以利用一个附加数组,处理方式类似于栈,其大小等于实际存储在字典中的关键字数目,以帮助确定大数组中某个给定的项是否是有效的。)
答案: 可以利用一个附加数组,处理方式类似于栈,其大小等于实际存储在字典中的关键字数目,以帮助确定大数组中某个给定的项是否是有效的。 直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进行寻址。注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。试比较下列指令中源操作数的寻址方式(VARW是内存字变量):
答案: MOV AX, 1234H 是立即寻址,而 MOV AX, [1234H] 是直接寻址;MOV AX, VARW 和 MOV AX, [VARW] 均是直接寻址。
这些例题展示了直接寻址编程的基本概念和实现方法,包括在动态集合中查找最大元素、使用位向量表示动态集合、实现带有卫星数据的直接寻址表,以及在不同寻址方式之间的比较。通过这些例题,可以更好地理解和应用直接寻址编程技巧。