链表初始化时需要二级指针
//此处的二级指针即,ppHead指向pHead指向的值
NodeType *pHead = NULL;
CreaList(&pHead);
//传地址
static void CreaList(NodeType **ppHead)
{
//这里用ppHead二级指针指向pHead指针的地址
NodeType *pNew;
//*pHead指向pHead地址对应的内容,即头指针指向的内容,一级指针
*ppHead = pNew;
}
NodeType *pHead = NULL;
CreaList(pHead);
//此时是值传递,传的是一个指针的值,不是地址
static void CreaList(NodeType *ppHead)
{
//这进的ppHead是函数体内新建的,指向mian函数中的pHead同一个值,但不与pHead是同一个指针同一个地址
NodeType *pNew;
//此时ppHead赋值是函数内ppHead指针赋值,不与main中pHead挂钩,函数结束,ppHead销毁
ppHead = pNew;
}
typedef void SeqList; 把void命名成SeqList
typedef void SeqListNode;
用void封装,就不能在外部用修改 比如 SeqList list ;
list->length ;
就会出错,因为list
是空指针
typedef unsigned int TSeqListNode;
typedef struct _tag_SeqList
{
int capacity;
int length;
TSeqListNode* node;
} TSeqList;
void SeqList_Clear(SeqList* list) // O(1)
{
TSeqList* sList = (TSeqList*)list; #所以在插入等的函数中,转化为真实的SeqList类型
if( sList != NULL )
{
sList->length = 0;
}
}