2.5.1 有序链表类型 其中部分操作的伪码算法如下: bool MakeNode( SLink &p, ElemType e ) { // 生成一个数据元素和 e 相同的新结点 *p,并返回TRUE, // 若存储分配失败,则返回 FALSE。 p = new LNode; if (!p) return FALSE; p->data = e; p->next = NULL; return TRUE; } |
在实现基本操作的这些函数时应注意维持链表结构中定义的各个成员的"正确性"。 |
|||
bool InitList( OrderedLinkList &L ) { // 构造一个空的有序链表 L,若存储分配失败, // L.head = NULL 并返回 FALSE,否则返回 TRUE。 if ( MakeNode( L.head, 0 ) ) { L.tail = L.curPtr = L.head; L.length= L.curPos = 0; return TRUE; } else { L.head = NULL; return FALSE; } } // InitList |
虚设头结点的数据域为0 。 |
|||
bool GetPos (OrderedLinkList L, int pos ) { // 若1≤pos≤LengthList(L),则移动当前指针指向第pos个结点, // 且返回函数值为TRUE,否则不移动当前指针且返回函数值为FALSE。 if ( pos < 1 || pos > L.len ) return FALSE; if ( L.curPos > pos ) { L.curPtr = L.head -> next; L.curPos = 1; } while ( L.curPos < pos ) { L.curPtr = L.curPtr -> next; ++L.curPos; } return TRUE; } |