链表的游标(cursor)实现法

如果需要链表而又不能使用指针,那么可以用游标实现法。

链表的指针实现中有两个重要特点:

1.数组存储在一推结构体中,每一个包含数据及指向下一个结构体的指针。

2.一个新的结构体可以通过调用malloc而从系统全局内存(global memory)得到。并可以通过调用free而被释放。

游标法必须能够模仿实现这两条特性。

满足条件1的逻辑方法是要有一个全局的结构体数组。对于该数组中的任何单元,其数组下标可以用来代表一个地址。

typedef int PtrToNode;
typdef PtrToNode List;
typdef PtrToNode Position;

struct Node
{
  ElementType Element;
  Position Next;
}:
struct Node CursorSpace[ SpaceSize ]

为了模拟条件2,必须让CursorSpace数组中的单元代行malloc和free的功能。为此,可保留一个表(freelist)。这个表由不在任何表中的单元构成,且用单元0作为表头,对于Next,0的值等价于NULL指针。其初始配置如下:

Slot Element Next
0   1
1   2
2   3
3   4
4   5
5   6
6   7
7   8
8   9
9   10
10   0

实现代码如下:

static Position CusorAlloc( void )
{
  Position P;
  P = CursorSpace[0].Next;
  CursorSpace[0].Next = CursorSpace[p].Next;
  return P;
}
static void CursorFree( Positon P )
{
  CursorSpace[P].next = CursorSpace[0].Next;
  CursorSpace[0].next = P;
}

猜你喜欢

转载自www.cnblogs.com/tzhao/p/9378569.html