書中對於創建一個空線性表的定義如下:
struct SeqList{ int MAXNUM; // 順序表中最大元素的個數(也就是最多多少個元素),(其實MAXNUM也可以定義在外面) int n; // 存放線性表中元素的個數 (n<=MAXNUM) DataType *element; //存放線性表的元素,element[0],element[1]... //后續要給這個指針分配一個連續的區域 };
typedef struct SeqList * PSeqList;
//為使用方便,定義一個SeqList類型的指針類型
1 PSeqList createNullList_seq(int m){ 2 PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList)); 3 if (palist != NULL){ 4 palist->element = (DataType*)malloc(sizeof(DataType)*m); 5 if ( palist -> element){ 6 palist -> MAXNUM = m; 7 palist -> n = 0; 8 return palist; 9 } 10 else free(palist); 11 } 12 printf("OUT OF SPACE!!"); 13 return NULL; 14 }
對上述函數的一個理解:返回值是一個指向SeqList結構的一個指針;
傳入的數據是指打算存放數據元素的個數;
然后第一步操作是定義一個指向SeqList結構的指針,並為其分配了一塊區域(存放一個SeqList結構大小),通過 -> 訪問里面的數據;
然后判斷了是否能找到這樣大的區域,如果沒有則返回NULL,因此以NULL作為判斷條件,如果為NULL,就可以直接結束了;
然后為element指針分配區域,要用到傳入的參數,返回一個可以裝m個DataType類型大小的連續區域;
然后是以palist->element為判斷條件,(這里可以這樣理解,就是palist->element表示的是一個地址,但是如果內存不夠等其他情況,返回NULL,也相當於是false,如果為NULL的話,就是第一次可以分配成功,第二次未成功,那不要忘記把第一次分配的給free),如果成功的話,就對MAXNUM賦值m,也就是最多有m個元素,初始化n的值為0(n表示線性表中已經存放的元素的個數);
結束之后,返回得到的這樣一個指針。
看完第一個方法,還可以理解,主要是c指針,結構,數組相關的,后續會更新。