最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中單鏈表操作的示例代碼

 更新時間:2022年10月26日 11:37:22   作者:我不是禿頭sheep  
這篇文章主要為大家詳細(xì)介紹了C++中單鏈表操作的示例代碼,主要包括單鏈表的創(chuàng)建、元素的插入和刪除等。文中的代碼簡潔易懂,需要的可以參考一下

任務(wù)要求

實(shí)現(xiàn)單鏈表的下列功能:

1、 從鍵盤輸入一組數(shù)據(jù),創(chuàng)建單鏈表;

2、 輸出單鏈表;

3、 插入元素,給出插入成功或失敗的信息;

4、 頭插,給出插入成功或失敗的信息;

5、 尾插,給出插入成功或失敗的信息;

6、 刪除元素,給出插入成功或失敗的信息;

7、 頭刪,給出插入成功或失敗的信息;

8、 尾刪,給出插入成功或失敗的信息;

9、 打印鏈表長度。

代碼

#include <iostream>
#include <string> 
using namespace std;

// 定義結(jié)構(gòu)體
typedef struct Node {
	int data;		// 數(shù)據(jù)域
	Node* next;		// 指針域
}Node, *LinkList; 


// 打印菜單
void printMenu() {
	string temp(10, '-');
	cout << temp + temp + temp << endl;
	cout << "\t單鏈表操作界面\n";
	cout << "\t 1.創(chuàng)建單鏈表\n";
	cout << "\t 2.打印單鏈表\n";
	cout << "\t 3.插入結(jié)點(diǎn)(指定位置)\n";
	cout << "\t 4.插入結(jié)點(diǎn)(頭插)\n";
	cout << "\t 5.插入結(jié)點(diǎn)(尾插)\n";
	cout << "\t 6.刪除結(jié)點(diǎn)(指定位置)\n";
	cout << "\t 7.刪除結(jié)點(diǎn)(頭刪)\n";
	cout << "\t 8.刪除結(jié)點(diǎn)(尾刪)\n";
	cout << "\t 9.統(tǒng)計鏈表長度\n";
	cout << temp + temp + temp << endl;
}

// 初始化鏈表
bool initLinkList(LinkList& L) {
	// 獲取要初始化的長度
	cout << "你要初始化的單鏈表長度:";
	int count;
	cin >> count;

	// 初始化頭結(jié)點(diǎn) 頭結(jié)點(diǎn)的數(shù)據(jù)域存放數(shù)據(jù)個數(shù)
	L = new Node;
	L->next = NULL;
	L->data = count;

	// 根據(jù)count 插入數(shù)據(jù)(尾插法)
	Node* p = L;
	Node* temp;
	for (int i = 0; i < count; i++) {
		temp = new Node;
		cout << "請輸入第" + to_string(i+1) + "個數(shù)據(jù):";
		cin >> temp->data;
		temp->next = NULL;
		p->next = temp;
		p = p->next;
	}
	return true;
}

// 打印鏈表
bool printLinkList(LinkList& L) {
	// 判斷是否初始化
	if (L == NULL) {
		cout << "未初始化單鏈表"<<endl ;
		return  false;
	}
	
	// 從首元結(jié)點(diǎn)往下一一打印數(shù)據(jù)
	Node* temp = L->next;
	while (temp != NULL) {
		cout << to_string(temp->data) + " -> ";
		temp = temp->next;
	}

	// 補(bǔ)一個NULL
	cout << "NULL" << endl;
	return true;
}

// 指定位置插入(index范圍 1 - n)
bool locationInsert(LinkList& L) {
	// 判斷是否初始化
	if (L == NULL) {
		cout << "未初始化單鏈表" << endl;
		return  false;
	}

	// 獲取要插入的位置 范圍判斷->輸入到對為止
	int index;
	while (true) {
		cout << "輸入要插入的位置(1~n):";
		cin >> index;
		if (index <= L->data + 1 && index >= 1)break;
		cout << "輸入的位置有誤" <<endl;
	};

	// 新建節(jié)點(diǎn) 獲取數(shù)據(jù)存放到數(shù)據(jù)域
	Node* temp = new Node;
	cout << "輸入要插入的數(shù)據(jù):";
	cin >> temp->data;
	
	// p指針向后移動 移動到要插入位置的前一個節(jié)點(diǎn)
	Node* p = L;
	for (int i = 1; i < index; i++) {
		p = p->next;
	}

	// 插入操作
	temp->next = p->next;
	p->next = temp;

	// 數(shù)據(jù)個數(shù)+1
	L->data += 1;
	return true;
}

// 頭插
bool headInsert(LinkList& L) {
	// 判斷是否初始化
	if (L == NULL) {
		cout << "未初始化單鏈表" << endl;
		return  false;
	}

	// 新建節(jié)點(diǎn) 獲取數(shù)據(jù)存放到數(shù)據(jù)域
	Node* temp = new Node;
	cout << "輸入要插入的數(shù)據(jù):";
	cin >> temp->data;
	
	// 頭插操作
	temp->next = L->next;
	L->next = temp;

	// 數(shù)據(jù)個數(shù)+1
	L->data += 1;
	return true;
}



// 尾插
bool tailInsert(LinkList& L) {
	// 判斷是否初始化
	if (L == NULL) {
		cout << "未初始化單鏈表" << endl;
		return  false;
	}
	// 新建節(jié)點(diǎn) 獲取數(shù)據(jù)存放到數(shù)據(jù)域
	Node* temp = new Node;
	cout << "輸入要插入的數(shù)據(jù):";
	cin >> temp->data;

	// p指針移動到最后一個節(jié)點(diǎn)
	Node* p = L->next;
	while (p->next != NULL){
		p = p->next;
	}

	// 尾插操作
	p->next = temp;
	temp->next = NULL;

	// 數(shù)據(jù)個數(shù)+1
	L->data += 1;
	return true;
}


// 頭刪
bool headDelete(LinkList& L) {
	// 判斷是否有元素
	if (L->data < 1) {
		cout << "單鏈表沒有元素" << endl;
		return  false;
	}

	// 頭刪操作
	if (L->data > 1) {	// 有多個數(shù)據(jù)節(jié)點(diǎn)
		Node* temp = L->next;
		L->next = L->next->next;
		delete temp;
	}else {				// 只有一個首元結(jié)點(diǎn)
		delete L->next;
		L->next = NULL;
	}

	// 數(shù)據(jù)個數(shù)-1
	L->data -= 1;
	return true;
}

// 尾刪
bool tailDelete(LinkList& L) {
	// 判斷是否有元素
	if (L->data < 1) {
		cout << "單鏈表沒有元素" << endl;
		return  false;
	}
	
	// 尾刪操作
	if (L->data > 1) {	// 有多個數(shù)據(jù)節(jié)點(diǎn)
		// 移動p指針到尾結(jié)點(diǎn)的前一個節(jié)點(diǎn)
		Node* p = L;
		for (int i = 0; i < L->data-1 ; i++) {
			p = p->next;
		}
		// 刪除操作
		delete p->next;
		p->next = NULL;
	}else {				// 只有一個首元結(jié)點(diǎn)
		delete L->next;
		L->next = NULL;
	}

	// 數(shù)據(jù)個數(shù)-1
	L->data -= 1;
	return true;
}

// 指定位置刪除(index范圍 1 - n)
bool locationDelete(LinkList& L) {
	// 判斷是否有元素
	if (L->data < 1) {
		cout << "單鏈表沒有元素" << endl;
		return  false;
	}
	// 獲取要刪除的位置 范圍判斷->輸入到對為止
	int index;
	while (true) {
		cout << "輸入要刪除的位置(1~n):";
		cin >> index;
		if (index <= L->data && index >= 1)break;
		cout << "輸入的位置有誤" << endl;
	};
	
	if (index == 1) {				// 頭刪
		headDelete(L);
	}else if (index == L->data) {	// 尾刪
		tailDelete(L);
	}else {							// 中間刪
		// 將p指針移動到要刪除節(jié)點(diǎn)的前一個節(jié)點(diǎn)
		Node* p = L;
		for (int i = 1; i < index; i++) {
			p = p->next;
		}
		// 刪除操作
		Node* temp = p->next;
		p->next = p->next->next;
		delete temp;
		// 數(shù)據(jù)個數(shù)-1
		L->data -= 1;
	}
	return true;
}

// 打印鏈表長度
bool printLength(LinkList& L) {
	// 判斷是否有元素
	if (L == NULL) {
		cout << "未初始化單鏈表" << endl;
		return  false;
	}
	// 打印頭結(jié)點(diǎn)的數(shù)據(jù)
	cout << "鏈表長度為[" + to_string(L->data) + "]" << endl;
	return true;
}

// 程序主入口
int main() {
	bool flag = true;	// 標(biāo)記
	int option;			// 操作選項(xiàng) [0 - 9]
	LinkList L = NULL;	// 初始化鏈表指針為NULL
	printMenu();		// 打印菜單
	while (flag) {
		cout << "請操作:";
		cin >> option;
		switch (option) {
			case 1: // 初始化
				initLinkList(L);
				printLinkList(L);
				break;
			case 2: // 打印菜單
				printLinkList(L);
				break;
			case 3:	// 指定位置插入
				locationInsert(L);
				printLinkList(L);
				break;
			case 4:	// 頭插
				headInsert(L);
				printLinkList(L);
				break;
			case 5:	// 尾插
				tailInsert(L);
				printLinkList(L);
				break;
			case 6:	// 指定位置刪除
				locationDelete(L);
				printLinkList(L);
				break;
			case 7:	// 頭刪
				headDelete(L);
				printLinkList(L);
				break;
			case 8:	// 尾刪
				tailDelete(L);
				printLinkList(L);
				break;
			case 9:	// 打印鏈表長度
				printLength(L); 
				printLinkList(L);
				break;
			case 0:	// 退出
				cout << "成功退出程序!" << endl;
				flag = false;
				break;
			default:// 其他情況
				cout << "操作有誤,重新輸入!" << endl;
		}
	}
	return 0;
}

運(yùn)行結(jié)果

到此這篇關(guān)于C++中單鏈表操作的示例代碼的文章就介紹到這了,更多相關(guān)C++單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言的各類變量和零值的比較詳解

    C語言的各類變量和零值的比較詳解

    這篇文章主要為大家介紹了C語言的各類變量和零值的比較,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 淺談C++虛重載操作符 virtual operator= 的使用方法

    淺談C++虛重載操作符 virtual operator= 的使用方法

    下面小編就為大家?guī)硪黄獪\談C++虛重載操作符 virtual operator= 的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言編寫學(xué)生成績管理系統(tǒng)

    C語言編寫學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言編寫學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++學(xué)習(xí)小結(jié)之?dāng)?shù)據(jù)類型及轉(zhuǎn)換方式

    C++學(xué)習(xí)小結(jié)之?dāng)?shù)據(jù)類型及轉(zhuǎn)換方式

    本文給大家分享的是本人在學(xué)習(xí)C++過程中的一個小心得,關(guān)于數(shù)據(jù)類型和轉(zhuǎn)換方式的,這里記錄下來,推薦給菜鳥們,高手大神請直接飄過。
    2015-07-07
  • C++類型轉(zhuǎn)換和IO流操作處理教程

    C++類型轉(zhuǎn)換和IO流操作處理教程

    這篇文章主要給大家介紹了關(guān)于C++類型轉(zhuǎn)換和IO流操作處理的相關(guān)資料,標(biāo)準(zhǔn)C++為了加強(qiáng)類型轉(zhuǎn)換的可視性,引入了四種命名的強(qiáng)制類型轉(zhuǎn)換操作符,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • C語言學(xué)生成績管理系統(tǒng)設(shè)計

    C語言學(xué)生成績管理系統(tǒng)設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生成績管理系統(tǒng)設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 在clion上配置libtorch開發(fā)環(huán)境的圖文詳解

    在clion上配置libtorch開發(fā)環(huán)境的圖文詳解

    這篇文章主要介紹了在clion上配置libtorch開發(fā)環(huán)境的圖文詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C++11中的原子量和內(nèi)存序詳解

    C++11中的原子量和內(nèi)存序詳解

    這篇文章主要給大家介紹了關(guān)于C++11中原子量和內(nèi)存序的相關(guān)資料,文中通過示例代碼介紹地方非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • 使用C++一步步實(shí)現(xiàn)俄羅斯方塊

    使用C++一步步實(shí)現(xiàn)俄羅斯方塊

    本文給大家分享的是作者在使用C++制作俄羅斯方塊的時候的思路分析以及開發(fā)準(zhǔn)備和實(shí)驗(yàn)原理,都是些基礎(chǔ)的知識儲備,希望大家能夠喜歡,具體的代碼我們下一節(jié)再分享給大家
    2017-12-12
  • Linux下Select多路復(fù)用實(shí)現(xiàn)簡易聊天室示例

    Linux下Select多路復(fù)用實(shí)現(xiàn)簡易聊天室示例

    大家好,本篇文章主要講的是Linux下Select多路復(fù)用實(shí)現(xiàn)簡易聊天室示例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論

宣城市| 沂南县| 南通市| 木兰县| 久治县| 德州市| 饶河县| 新龙县| 平昌县| 育儿| 昭苏县| 周口市| 厦门市| 剑阁县| 新昌县| 孝感市| 红桥区| 阜城县| 宁晋县| 东乌| 文化| 漾濞| 格尔木市| 台北市| 梅河口市| 五峰| 沁水县| 宜君县| 仁寿县| 金坛市| 凯里市| 宁强县| 平湖市| 彭山县| 西吉县| 中江县| 特克斯县| 岳阳市| 衡南县| 崇左市| 乐平市|