1. 程式人生 > 其它 >用C++編寫單鏈表類模板,實現連結串列的建立,遍歷,連結串列結點的插入,刪除,查詢,並建立一個整數連結串列和一個字串連結串列

用C++編寫單鏈表類模板,實現連結串列的建立,遍歷,連結串列結點的插入,刪除,查詢,並建立一個整數連結串列和一個字串連結串列

技術標籤:C++學習c++連結串列字串

編寫單鏈表類模板,實現連結串列的建立,遍歷,連結串列結點的插入,刪除,查詢,並建立一個整數連結串列和一個字串連結串列。

IntList.h

#include<iostream>
using namespace std;
template<typename T>
class intList
{
protected:
	struct Node {
		struct Node* next;
		T data;
	};
	Node* pFirst;
public:
	intList();			//建構函式
	~intList();
//構析函式 //向連結串列的第i個位置插入一個元素,插入成功返回true,失敗返回false bool insert(int i, T elem); //刪除連結串列的第i個元素,刪除成功返回true,失敗返回false bool remove(int i, T& elem); int find(T elem)const; //查早elem的元素,返回該元素在連結串列中的位置 int length() const; //返回連結串列長度 void printList(); //輸出連結串列 }; template<typename T> intList<
T>::intList() { pFirst = new Node; pFirst->next = NULL; cout << "連結串列頭創立成功\n"; } template<typename T> intList<T>::~intList() { Node* p, * q; p = pFirst; while (p->next != NULL) { q = p->next; delete p; p = q; } delete p; pFirst = NULL; } template
<typename T> int intList<T>::length() const { Node* p; int j; p = pFirst->next; j = 0; while (p != NULL) { p = p->next; j++; } return j; } template<typename T> int intList<T>::find(T elem) const { Node* p; int j; T data; p = pFirst->next; j = 1; while (p != NULL) { data = p->data; if (data == elem) break; p = p->next; j++; } if (p != NULL) return j; else return 0; } template<typename T> bool intList<T>::insert(int loc, T elem) { Node* p, * s; int j; p = pFirst; j = 0; while ((p != NULL) && (j < loc - 1)) { p = p->next; j++; } if (p) //判斷p不是null否則無法做P->next的引用 { if ((j == loc - 1) && p->next == NULL) { s = new Node; p->data = elem; s->next = NULL; p->next = s; return true; } else if ((j == loc - 1) && (p->next != NULL)) { s = new Node; p->data = elem; s->next = p->next->next; p->next = s; return true; } else return 0; } } template<typename T> bool intList<T>::remove(int i, T& elem) { Node* p, * q; int j; p = pFirst; j = 0; while ((p->next != NULL) && (j < i - 1)) { p = p->next; j++; } if ((p->next != NULL) && (j < i)) { q = p->next; p->next = p->next->next; elem = q->data; delete(q); return true; } else return false; } template<typename T> void intList<T>::printList() { Node* p; p = pFirst; while (p->next != NULL) { cout << p->data; p = p->next; }; cout << endl; }

主函式

#include"inList.h"
int main() {
	intList<int> L;		//整數連結串列
	for (int i = 0; i < 10; i++)
	{
		L.insert(i + 1, i);
	}
	L.printList();
	int el1;
	if (L.remove(4, el1))
	{
		cout << "Delete the fourth element success!" << "--delete is " << el1 << endl;
	}
	else {
		cout << "Delete fail!" << endl;
	}
	L.printList();
	int loc = L.find(5);
	if (loc != 0) {
		cout << "Find! The position of Element 5 is " << loc << endl;
	}
	else {
		cout << "Not find!" << endl;
	}
	intList<string> M;		//字串連結串列
	for (int i = 0; i < 10; i++)
	{
		string s = "this is ";
		s += (char)(65 + i);
		M.insert(i + 1, s+" ");
	}
	M.printList();
	string el2 ;
	if (M.remove(4, el2))
	{
		cout << "Delete the fourth element success!" << "--delete is " << el2 << endl;
	}
	else {
		cout << "Delete fail!" << endl;
	}
	M.printList();
	loc = M.find("this is D ");
	if (loc != 0) {
		cout << "Find! The position of Element \"B\" is " << loc << endl;
	}
	else {
		cout << "Not find!" << endl;
	}
	return 0;
}

執行結果

在這裡插入圖片描述
程式碼僅供參考~~~~~~~