#include<iostream>
using namespace std;
template<class Type>
class LinkNode {
public:
Type* next;
Type data;
LinkNode()
{
next = NULL;
data = 0;
}
LinkNode(Type* ptr, Type dat)
{
next = ptr;
data = dat;
}
};
template<class Type>
class LinkList {
public:
LinkList() {
cout << "建立LinkList对象!" << endl;
}
void InitList(LinkNode<Type>* L); //初始化链表,建立一个空的链表
void CreateList(LinkNode<Type>* L, const Type a[], const int n); //头插法建立链表
void DestoryList(LinkNode<Type>* L); //销毁链表
void DispList(LinkNode<Type>* L) const;
bool ListEmpty(LinkNode<Type>* L);
int ListLength(LinkNode<Type>* L);
bool GetElem(LinkNode<Type>* L, const int i, Type &e); //求链表的中某个元素值
int LocateList(LinkNode<Type>* L, const Type& e); //按照元素值查找链表
bool InsertList(LinkNode<Type>* L, const int i, Type& e); //将元素插入到链表中的某个位置
bool DeleteList(LinkNode<Type>* L,const int i, const Type &e); //删除某个元素值,并用e接收元素值
~LinkList() {
DestoryList(L);
cout << "调用析构函数销毁LinkList对象!" << endl;
} //VS此处报错,显示L未找到标识符
};
template<class Type>
void LinkList<Type>::InitList(LinkNode<Type>* L) {
L = new LinkNode(); //L = (LinkNode*)malloc(sizeof(LinkNode));
}
template<class Type>
void LinkList<Type>::CreateList(LinkNode<Type>* L, const Type a[], const int n) {
LinkNode<Type>* p = L, * s;
int i;
for (i = 0;i < n;i++) {
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = a[i];
s->next = p->next;
p->next = s;
}
cout << "链表已建立完成!" << endl;
}
template<class Type>
void LinkList<Type>::DestoryList(LinkNode<Type>* L)
{
LinkNode<Type>* pre = L->next;
while (pre != NULL) {
delete pre; //删除节点pre
pre = pre->next; //移动到下一个节点
}
delete pre;
cout << "链表销毁完毕!" << endl;
}
template<class Type>
void LinkList<Type>::DispList(LinkNode<Type>* L) const
{
LinkNode<Type>* pre = L->next;
while (pre != NULL) {
cout << pre->data << " ";
pre = pre->next; //移动到下一个位置
}
cout << endl;
cout << "输出链表完毕!" << endl;
}
template<class Type>
bool LinkList<Type>::ListEmpty(LinkNode<Type>* L)
{
return (L->next != NULL);
}
template<class Type>
int LinkList<Type>::ListLength(LinkNode<Type>* L)
{
int length = 0;
LinkNode<Type>* pre = L;
while (pre->next != NULL) {
length++;
pre = pre->next;
}
return length;
}
template<class Type>
bool LinkList<Type>::GetElem(LinkNode<Type>* L, const int i, Type& e)
{
LinkNode<Type>* pre = L;int j = 0;
if (i < 0) return false;
while (j < i - 1 && pre != NULL) { //找到第i个位置之前的元素位置
j++;
pre = pre->next; //后移一个节点
}
if (pre == NULL) {
cout << "查询失败!" << endl;
return false;
}
else
{
cout << "查询成功!" << endl;
e = pre->data;
return true;
}
}
template<class Type>
int LinkList<Type>::LocateList(LinkNode<Type>* L, const Type& e)
{
LinkNode<Type>* pre = L->next;
int num = 1;
while (pre != NULL && e != pre->data) {
pre = pre->next;
num++;
}
if (pre == NULL) {
cout << "按照元素查询失败!" << endl;
return (0);
}
else
{
cout << "按照元素查询成功!" << endl;
return (1);
}
}
template<class Type>
bool LinkList<Type>::InsertList(LinkNode<Type>* L, const int i, Type& e)
{
LinkNode<Type>* pre = L->next, * s;int j = 0;
if (i < 0) return false;
while (j < i - 1 && pre != NULL) {
j++;
pre = pre->next;
}
if (pre == NULL) {
cout << "插入失败!" << endl;
return false;
}
else
{
s = new LinkNode();
s->data = e;
s->data = pre->next;
pre->next = s;
cout << "插入成功!" << endl;
return true;
}
}
template<class Type>
bool LinkList<Type>::DeleteList(LinkNode<Type>* L, const int i, const Type& e)
{
LinkNode<Type>* pre = L->next, * q;
int j = 0;
if (i < 0) return false; //判断输出的数值是否合法
while (pre != NULL) {
pre = pre->next;
j++;
}
if (pre == NULL) {
cout << "删除失败!" << endl;
return false;
}
else
{
q = pre->next;
if (q == NULL) {
cout << "删除失败!" << endl;
return false;
}
e = q->data;
pre->next = q->next;
delete pre;
cout << "删除完成!" << endl;
return true;
}
}
int main() {
using std::cout;
using std::endl;
LinkNode<int>* L;
int arr[9] = { 23,41,8,15,46,7,10,20,9 };
LinkList<int> object;
object.InitList(L);
object.DispList(L);
cout << endl;
return 0;
}
今天在实现数据结构的单链表的时候碰到了问题,第一个就是我在析构函数调用DestoryList函数时,VS2019报错显示:“L”:找不到标识符。 另一个错误就是在LinkList类声明结束的位置显示“message : 查看对正在编译的 类 模板 实例化“LinkList<Type>”的引用”,求各路大神解答,我都快哭了。。。。