建立头文件
#pragma once
#ifndef LinkList_H
#define LinkList_H
template <class DataType >
struct Node
{
DataType data;
Node<DataType> *next;
};
template <class DataType>
class LinkList {
public:
LinkList();
LinkList(DataType a[], int n);
~LinkList();
int Locate(DataType x);
void Insert(int i, DataType x);
DataType Delete(int i);
void PrintList();
private:
Node<DataType> *first;
};
#endif
建立源文件实现成员函数
#include<iostream>
#include "LinkList.h"
using namespace std;
template<class DataType>
LinkList<DataType>::LinkList() {
first = new Node<DataType>;
first->next = NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataType a[], int n) {
Node<DataType> *r, *s;
first = new Node<DataType>;
r = first;
for (int i = 0; i < n; i++) {
s = new Node<DataType>;
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}
template<class DataType>
LinkList<DataType>::~LinkList() {
Node<DataType> *q = NULL;
while (first != NULL) {
q = first;
first = first->next;
delete q;
}
}
template<class DataType>
void LinkList<DataType>::Insert(int i, DataType x) {
Node<DataType> *p = first, *s = NULL;
int count = 0;
while (p != NULL && count < i - 1) {
p = p->next;
count++;
}
if (p == NULL) throw "Position";
else {
s = new Node<DataType>;
s->data = x;
s->next = p->next;
p->next = s;
}
}
template<class DataType>
DataType LinkList<DataType>::Delete(int i) {
Node<DataType> *p = first, *q = NULL;
DataType x;
int count = 0;
while (p != NULL && count < i - 1) {
p = p->next;
count++;
}
if (p == NULL || p->next == NULL) throw "Position";
else {
q = p->next;
x = q->data;
p->next = q->next;
delete q;
return x;
}
}
template<class DataType>
int LinkList<DataType>::Locate(DataType x) {
Node<DataType> *p = first->next;
int count = 1;
while (p != NULL) {
if (p->data == x) return count;
p = p->next;
count++;
}
return 0;
}
template<class DataType>
void LinkList<DataType>::PrintList() {
Node<DataType> *p = first->next;
while (p != NULL) {
cout << p->data << " " << endl;
p = p->next;
}
}
主程序
#include<iostream>
#include "LinkList.cpp"
using namespace std;
int main() {
int r[5] = { 1,2,3,4,5 };
LinkList<int>L(r, 5);
cout << "Data before inserting:" << endl;
L.PrintList();
try {
L.Insert(2, 3);
}
catch (char *s) {
cout << s << endl;
}
cout << "Data after inserting" << endl;
L.PrintList();
cout << "Position 5th:" << endl;
cout << L.Locate(5) << endl;
cout << "Data before deleting" << endl;
L.PrintList();
try {
L.Delete(1);
}
catch (char *s) {
cout << s << endl;
}
cout << "Data after deleting" << endl;
L.PrintList();
return 0;
}