今天我們來實現帶頭結點的乙個單鏈表的建立。
#include #include #include #define elemtype int
typedef struct node
node;
typedef struct node* linklist; //定義linklist為指向每個結構體的指標
/*建立含有n個結點的帶有頭結點的鍊錶*/
int creatlisthead(linklist *l,int n)
(*l)->next = null; //建立了乙個只有頭結點的單鏈表
/*建立新的結點並依次插入*/
for(i=0;idata = rand()%100 + 1; //隨機產生乙個100之內的數
p->next = (*l)->next;
(*l)->next = p;
} printf("finish creat linklist!\n");
return 0;
} int main()
如上標註顏色的地方為我們應該特別注意的地方:
1.建立乙個指標的時候,一定要同時對其進行初始化為null,以免後面出現不必要的錯誤(如檢查記憶體是否分配成功)
2.使用malloc()分配記憶體空間之後,一定馬上檢查指標是否為null,用來檢測是否分配成功。
3.本次建立中,我們使用了「指向指標的指標」來作為建立單鏈表的引數。為以後鍊錶中的插入操作刪除等很多操作提供了方便:
1)每個鍊錶結點,可能會發生刪除插入操作,所以注定了結點結構體中的指標肯定會不斷的發生變化———鍊錶結點的定義一定要用指標來對結點進行間接訪問
2)在傳入頭結點指標給呼叫函式時,在函式的操作過程中,會給頭結點分配記憶體空間,對其進行修改。所以我們要用指向頭結點指標的指標來作為函式的引數。
昨天就是因為問題2)浪費了乙個下午的時間,最後終於在各位網友和校友的關注下弄明白了,在此謝謝大家~
單鏈表為什麼用指向指標的指標
int a 1,b 2 void change int x void change int x void main 上面的例子很好的說明了傳遞指標與傳遞指標的指標的不同 所以在建立單鏈表時,由於需要修改傳遞給呼叫函式的頭指標的值,所以需要傳遞指向頭指標的指標 include include incl...
指標的引用與指向指標的指標
一般來說,為函式傳入乙個引數,如果希望函式執行完成後對引數的改動依然保留,那麼有兩種方式 傳入乙個引用 傳入乙個指標 傳入引用的方式很好理解,就是相當於將變數本身傳入,針對變數所進行的一切修改都是直接對變數本身的修改。傳入指標則不然,傳入指標後進行的修改,實際上是對指標指向的位址的內容進行修改,而不...
指向指標的指標
理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...