最近在做数据结构导论试题的时候无意中发现答案中有用到这些东西的Linklist L、Linklist *L、Node *p 和Node p,不过不清楚都具体指什么,故而从网上查找了一番:
先定义一个单链表结构体:
typedef struct node { DataType data; //数据域 struct node * next; //指针域 }Node,* LinkList; //Node是链表节点的类型 //sturct node类型定义为Node,指针类型定义为LinkList(一般表示链表类型,实质是头指针类型)
Linklist L
定义一个单链表类型的单链表L;
L可以作为指向定义的node结构体的指针;
Linklist *L
一般,用头指针表示链表类,即实质是该链表的头指针类型
L是指向定义的Node结构体指针的指针,所以(*L)是指向Node结构体的指针,可以用->运算符来访问结构体成员,即(*L)->elem,当然,(**L)就是Node型结构体了,所以可以用点运算符来访问结构体成员,即(**L).elem;
在链表操作中,我们常常要用链表变量作物函数的参数,这时,用LinkListL还是LinkList *L就很值得考虑深究了,一个用不好,函数就会出现逻辑错误,其准则是:
- 如果函数会改变指针L的值,而你希望函数结束调用后保存L的值,那你就要用LinkList*L,这样,向函数传递的就是指针的地址,结束调用后,自然就可以去改变指针的值;
- 而如果函数只会修改指针所指向的内容,而不会更改指针的值,那么用LinkListL就行了;
Node *p
定义了一个node类型的结构体指针p,p是工作指针(初始时p指向)
Node p
在网上到时没有查到Node p的使用,不过倒是查到了P=new node()的使用,也表示node类型的指针。