作为自己的笔记记录一下
单链表的建立
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
Status InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
if(!(*L)) /* 存储分配失败 */
return ERROR;
(*L)->next=NULL; /* 指针域为空 */
return OK;
}
int main()
{
LinkList A;
Status i;
}
问题:为什么单链表建立函数的参数要用二级指针LinkList *L 而不用一级指针呢?
InitList(&A);
L=&A;
*L就为一级指针A存储的地址
*L=(LinkList)malloc(sizeof(Node)); 此操作就是把建立一个内存地址赋给一级指针A
如果使用一级指针
int main()
{
LinkList L;
Status i;
L=&A;
i=InitList(L);
}
Status InitList(LinkList L) //L=&A;
{
L=(LinkList)malloc(sizeof(Node));
//L在此函数内新赋值了一段地址 原先是L=&A;但出了此函数L就释放了
if(!(*L)) /* 存储分配失败 */
return ERROR;
(*L)->next=NULL; /* 指针域为空 */
return OK;
}
或许也可以
struct Node A; struct Node B;
L=&A; L->next=&B; 以此类推 但是太过浪费
建立一个链表指针L
L存储的是头指针地址 L->next存储的是第一个结点的地址 L->data 没有值为空