簡單鏈表的創建和遍歷

直接貼代碼。
</pre><pre code_snippet_id="1679523" snippet_file_name="blog_20160511_3_5108966" name="code" class="cpp">#include <iostream>
using namespace std;
struct node					//定義結點結構類型
{
	char data;				//用於存放字符數據
	node *next;				//用於指向下一個結點(後繼結點)
};
node * create();			//創建鏈表的函數,返回表頭
void showList(node *head);	//遍歷鏈表的函數,參數爲表頭
int main()
{
	node *head;
	head = create();		//以head爲表頭創建一個鏈表
	showList(head);			//遍歷以head爲表頭的鏈表
	return 0;
}
node * create()
{
	node *head = NULL;		//表頭指針,一開始沒有任何結點,所以爲NULL
	node *pEnd = head;		//表爲指針,一開始沒有任何結點,所以指向表頭
	node *pS;				//創建新結點時使用的指針
	char temp;				//用於存放從鍵盤輸入的字符
	cout << "Please input a string end with '#':" << endl;
	do						//循環至少運行一次
	{
		cin >> temp;
		if (temp != '#')	//如果輸入的字符不是結尾符#,則建立新結點
		{
			pS = new node;	//創建新結點
			pS->data = temp;//新結點的數據爲temp
			pS->next = NULL;//新結點將成爲表尾,所以next爲NULL
			if (head == NULL)//如果鏈表還沒有任何結點存在
			{
				head = pS;	//則表頭指針指向這個新結點
			}
			else			//否則
			{
				pEnd->next = pS;//把這個新結點連接在表尾
			}
			pEnd = pS;		//這個新結點成爲了新的表尾
		}
	} while (temp != '#');	//一旦輸入了結尾符,則跳出循環
	return head;			//返回表頭指針
}
void showList(node *head)
{
	node *pRead = head;		//訪問指針一開始指向表頭
	cout << "The data of the link list are:" << endl;
	while (pRead != NULL)	//當訪問指針存在時(即沒有達到表尾之後)
	{
		cout << pRead->data;//輸出當前訪問結點的數據
		pRead = pRead->next;//訪問指針向後移動
	}
	cout << endl;
}
/*
接下來,我們把鏈表的創建和遍歷分析得更加具體化:
由於第一個結點也是動態分配的,因此一個鏈表始終要有一個指針指向它的表頭,否則我們將無法找到這個鏈表。我們把這個表頭指針稱爲head。
在創建一個多結點的鏈表時,新的結點總是連接在原鏈表的尾部的,所以我們必須要有一個指針始終指向鏈表的尾結點,方便我們操作。我們把這個表尾指針稱爲pEnd。
每個結點都是動態分配的,每分配好一個結點會返回一個指針。由於head和pEnd已經有了各自的崗位,我們還需要一個指針來接受剛分配好的新結點。我們把這個創建結點的指針稱爲pS。
在遍歷的過程中,需要有一個指針能夠靈活動作,指向鏈表中的任何一個結點,以讀取各結點的數據。我們把這個訪問指針稱爲pRead。
我們把創建鏈表和遍歷各自寫爲一個函數,方便修改和維護。*/

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