2.3.1 单链表和指针 可以用 C 语言中的"结构指针"来描述链表结构。 typedef struct LNode { ElemType data; struct LNode *next; } *SLink; 若设 LNode *p,*q; SLink H; |
从C语言的类型定义可见,在链表中,"结点" 和 "指针" 是相互紧密关联的两个概念,不同的结点结构对应有不同的指针类型。
|
|||||||||
则 p,q 和 H 均为以上定义的指针型变量。若 p 的值非空,则表明 p 指向某个结点,p->data
表示 p 所指结点中的数据域,p->next 表示 p 所指结点中的指针域,若非空,则指向其"后继"结点。 |
p->data 即为(*p).data,类似地,p->next 即为(*p).next。 注意:只有在 p "有值" 且"值不为空"的情况下, p->data 和 p->next 才有意义。 |
|||||||||
指针型变量只能作同类型的指针赋值与比较操作。并且,指针型变量的"值"除了由同类型的指针变量赋值得到外,都必须用 C 语言中的动态分配函数得到。例如,p = new LNode; 表示在运行时刻系统动态生成了一个 LNode 类型的结点,并令指针 p "指向"该结点。反之,当指针 p 所指结点不再使用,可用 delete p; 释放此结点空间。 |
注意:一旦执行了delete p; 的语句,(*p)不再存在,自然 p->data 和 p->next 也就没有意义了。 |