鏈表,棧,隊列

鏈表

使用鏈表時最好使用一個表頭,也稱爲頭結點。個人的感受是,使用頭節點有一個好處那就是可以方便地修改鏈表中第一個結點的值。因爲對鏈表中結點的操作通常都是通過調用函數,將指向節點的指針結點作爲參數傳入來進行更改的。但由於函數是call by value,若使用一個指針直接指向第一個結點, 這個指針指向的結點的值可以改變,但指針本身的值不能改變。例如要在鏈表的第一個結點前插入一個新的結點,如果指向第一個結點的指針是p,則當p傳入函數時,p自身的值無法被改變,也就是說p始終只能指向第一個結點。這時候如果想改變p的值(也就是p中存儲的地址),則必須讓函數返回一個值賦給p,這樣十分繁瑣。而有了表頭以後並設置一個指針(如L)指向表頭,則可以通過L訪問整個鏈表。更重要的是,對第一個結點的訪問是通過L指向的表頭的next指針進行的,當將L作爲參數傳入函數時,只有L的值不能改變(L不能指向其他空間),但表頭、鏈表中的第一個結點和其他所有結點都是通過指針去訪問的,這樣就可以直接在函數中改變鏈表中所有結點和表頭的值,而不必擔心call by value帶來的影響。當然,L的創建必須要通過函數返回一個值在main()中賦給它來實現,通常增加一個返回值爲指向表頭的指針的函數即可

另外經過查找後還在網上發現了一些設置表頭的優點,轉載如下:

(1) 對帶頭結點的鏈表,在表的任何結點之前插入結點或刪除表中任何結點,所要做的都是修改前一結點的指針域,因爲任何元素結點都有前驅結點。若鏈表沒有頭結點,則首元素結點沒有前驅結點,在其前插入結點或刪除該結點時操作會複雜些

(2) 對帶頭結點的鏈表,表頭指針是指向頭結點的非空指針,因此空表與非空表的處理是一樣的


隊列

隊列是在隊尾(rear)插入元素,在隊列頭部(front)刪除元素

隊列可以用鏈表實現也可以用數組實現。如果用數組實現的話,頭結點中除了要存儲front和rear之外,還要添加一個記錄數組長度的變量(total)和記錄隊列中已有元素個數的變量(current),通過判斷current是否小於等於total來判斷隊列是否已滿。初始化時,front應爲0,rear應爲-1。在更改front和rear的值時記得對數組長度取餘

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章