用C++編寫單鏈表類模板,實現連結串列的建立,遍歷,連結串列結點的插入,刪除,查詢,並建立一個整數連結串列和一個字串連結串列
阿新 • • 發佈:2020-12-22
編寫單鏈表類模板,實現連結串列的建立,遍歷,連結串列結點的插入,刪除,查詢,並建立一個整數連結串列和一個字串連結串列。
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;
}
執行結果
程式碼僅供參考~~~~~~~