單鏈表 【增刪改查功能 】【 c/c++課設必備!】(信息管理系統)(超詳細版)

前言
1,此爲頭插法線性錶鏈式結構
2,涉及到了單鏈表的增刪改查
3.可以照搬的c++/c的信息管理系統項目中
4.簡單易學,完成課設
實現步驟
一, 創建結構體

#include <iostream>
using namespace std;
//結點類
class node{
	public:
		int data;//數據空間
		node* next;//指針域
};

二, 創建空鏈表

//創建鏈表(頭插法)
node* creatList() {
	node* headNode = new node;
	//headNode 成爲了結構體變量
	//變量使用前必須初始化
	//headNode->data=1;
	headNode->next = NULL;
	return headNode;
}

三, 創建結點

//創建結點
node* createNode(int data) {

	node* newnode = new node;//給newnode開闢(申請)一個空間,
	//相當於(struct node* )malloc(size of(struct node));
	newnode->data = data;
	newnode->next = NULL;
	return newnode;
}

四, 插入/增加數據

void insert_node_by_Head(node* headNode, int data) {
	node* newNode= createNode(data);//初始化給此指針賦值(調用的上面的函數)
	newNode->next = headNode->next;//新結點指向原來表頭的下一個
	headNode->next = newNode;//原來表頭的下一個指向新結點
	//相當於都往後橫移了一位;
}

嘿!看圖
這回明白了吧hhhhh
在這裏插入圖片描述
五, 指定位置刪除

void deleNode(node* headNode, int posData) {
	node* posNode = headNode->next;//初始化
	node* posNodeFront = headNode;
	if (posNode == NULL)
		cout << "無法刪除,鏈表爲空" << endl;
	else {
		while (posNode->data != posData) {//如果要找的數據不等於現在的數據就一直往下找
			posNodeFront = posNode;//前面結點到後面結點的位置
			posNode = posNodeFront->next;//後面結點位置到原來位置的next
			if (posNode == NULL) {
				cout << "未找到相關信息,無法刪除" << endl;
				break;//return()直接結束掉函數也可
			}
		}
		posNodeFront->next = posNode->next;//前面結點的next指向後一個結點的next(中間的結點已經刪除)
		free(posNode);//釋放空間
	}
}

六,查找

node* sreachData(node* headNode, int posdata) {
	node* pMove = headNode->next;
	while (pMove != NULL && pMove->data != posdata) {//如果pMove沒有指向空:沒到表尾
	//與上指針沒找到指定數據就一直循環。兩個條件必須全部滿足纔可以
		pMove = pMove->next;
	}
	return pMove;
}

六, 打印出輸出

//遍歷(打印)
void printlist(node* headNode) {
	node* pMove = headNode->next;
	while (pMove) {
		cout << pMove->data<<"\t";
		pMove = pMove->next;
	}
	cout << endl;
}

主函數

int main()
{
	node* list = creatList();
	insert_node_by_Head(list,1);
	insert_node_by_Head(list, 2);
	insert_node_by_Head(list, 3);
	insert_node_by_Head(list, 4);
	insert_node_by_Head(list, 5);
	printlist(list);
	deleNode(list, 2);
	printlist(list);
	cout << sreachData(list, 3)->data << endl;

	system("pause");
	return 0;
}

下面是完整代碼(可運行)

#include "pch.h"
#include <iostream>

using namespace std;
class node{
	public:
		int data;//數據空間
		node* next;//指針域
};
//創建鏈表(頭插法)
node* creatList() {
	node* headNode = new node;
	//headNode 成爲了結構體變量
	//變量使用前必須初始化
	//headNode->data=1;
	headNode->next = NULL;
	return headNode;
}
//創建結點
node* createNode(int data) {
	node* newnode = new node;
	newnode->data = data;
	newnode->next = NULL;
	return newnode;
}
void insert_node_by_Head(node* headNode, int data) {
	//創建插入結點
	node* newNode= createNode(data);
	newNode->next = headNode->next;//新結點指向原來表頭的下一個
	headNode->next = newNode;//原來表頭的下一個指向新結點
}
//指定位置刪除
void deleNode(node* headNode, int posData) {
	node* posNode = headNode->next;//初始化
	node* posNodeFront = headNode;
	if (posNode == NULL)
		cout << "無法刪除,鏈表爲空" << endl;
	else {
		while (posNode->data != posData) {//如果要找的數據不等於現在的數據就一直往下找
			posNodeFront = posNode;//前面結點到後面結點的位置
			posNode = posNodeFront->next;//後面結點位置到原來位置的next
			if (posNode == NULL) {
				cout << "未找到相關信息,無法刪除" << endl;
				break;//return()直接結束掉函數也可
			}
		}
		posNodeFront->next = posNode->next;//前面結點的next指向後一個結點的next(中間的結點已經刪除)
		free(posNode);
	}
}
//查找
node* sreachData(node* headNode, int posdata) {
	node* pMove = headNode->next;
	while (pMove != NULL && pMove->data != posdata) {
		pMove = pMove->next;
	}
	return pMove;
}
//遍歷(打印)
void printlist(node* headNode) {
	node* pMove = headNode->next;
	while (pMove) {
		cout << pMove->data<<"\t";
		pMove = pMove->next;
	}
	cout << endl;
}
int main()
{
	node* list = creatList();
	insert_node_by_Head(list,1);
	insert_node_by_Head(list, 2);
	insert_node_by_Head(list, 3);
	insert_node_by_Head(list, 4);
	insert_node_by_Head(list, 5);
	printlist(list);
	deleNode(list, 2);
	printlist(list);
	cout << sreachData(list, 3)->data << endl;

	system("pause");
	return 0;
}

注:如何在實際項目中運用:這裏的int data改成需要的結構體就可實現;
strcmp()字符串比較函數,兩個字符串是不是一樣的
**

稍後我會做一個c++/c萬能的信息管理系統課程設計,
此片贊多了我就上傳,快給主播點點關注hhhhh

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