node *creat();//建立鍊錶,返回表頭,
void showlist(node *head);//遍歷鍊錶的函式,引數為表頭
int main()
node *creat()
else
pend=ps;
}} while (temp!='#');
return head;
}void showlist(node *head)
cout<
下面來說明一下上面的**。
鍊錶中的節點都是用乙個結構體來表示的。乙個節點就是乙個結構體型別的乙個變數。或者你也可以用類來代替,但是我從來沒有用類來寫過。
我們知道鍊錶是乙個節點指著另乙個節點。但是要用**真正的實現出來可沒有像理解概念一樣容易。
好了,現在要來建立鍊錶了。思想:
1.為了獲得鍊錶的首位址我們定義了乙個頭結點,在第一次建立節點的時候,這個節點也就是首節點的位址必須要儲存下來(乙個鍊錶的首位址你總的要有吧)。我們也就是用這個頭結點位址變數,我覺得應該叫做乙個普通的結構體指標變數來把它儲存下來。
或者我們也可以不要這麼做,我們也可以不定義這個結構體指標變數,我們可以定義乙個布林型變數,bool frist=true;然後判斷是不是第一次,是的話if(frist);就把第乙個節點的位址還回了。就不要引入什麼頭節點,什麼首節點這樣亂七八糟,容易迷糊的概念出來了。
2.每當我們建立乙個新節點的時候,我們需要把上乙個節點中的指標域指向下乙個也就是新建的這個節點,來完成乙個鍊錶的建立。可是當新建乙個節點的時候上乙個節點的指標變數ps會被銷毀,然後新建節點的時候這個ps會被從新附上值。我們沒有上乙個節點的指標還怎麼找到上乙個節點的指標域呢?為了能夠找到它,在上乙個節點的指標要銷毀的時候我們用乙個指標變數將其儲存下來。你看到上面是這麼做的:node *pend=head;我覺得這名字也不應該這麼取,什麼尾節點一直指向最後乙個節點,這樣指來指去,很容易糊塗。就是為了得到上乙個指標的指標域,需要乙個指標變數儲存上乙個節點的指標,這樣想會簡單一點。
遍歷鍊錶相對來說就比較容易了。你只要得到鍊錶的首節點的指標,先輸出該節點的資料,然後重置改節點的指標,也就是得到下乙個節點的指標如pread=pread->next;迴圈下去就行了。
簡單鍊錶的建立和遍歷
直接貼 include using namespace std struct node 定義結點結構型別 node create 建立鍊錶的函式,返回表頭 void showlist node head 遍歷鍊錶的函式,引數為表頭 int main node create else 否則 pend ...
環形鍊錶的建立和遍歷
建立環形單向鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標,幫助構建環形鍊錶 使用for來建立環形鍊錶 for int i 1 i nums i else 遍歷當前環形鍊錶 public void showboy first 不能動,使用輔助...
C語言單向鍊錶建立和遍歷
鍊錶是一種常見的資料結構,鍊錶是由多個結點 自引用結構體 串成的表。什麼是自引用結構體?自引用結構體是一種特殊的結構體型別,它有乙個指標型別的成員,這個指標成員指向與這個結構體一樣的型別。鍊錶就是由乙個乙個結點 自引用結構體 結點被指標串起組成的表。鍊錶的頭指標,頭節點 鍊錶中指向第乙個結點的指標,...