求助各位大佬 为什么我的这个调试没有 问题 运行几部后就出现bug
#include <iostream>了 可以帮忙改一改吗?
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T> class LinkList
{
public:
LinkList();
void HeadList(); //头插法
void HailList(); //尾插法
void Insert(); //插入元素
void Delete(int i);//删除表中元素
int GetData();//取得表中元素
int Search();//在表中寻找匹配项
int ListLength();//获得表中的长度
void Display();
~LinkList();
private:
Node<T> *first;
};
template <class T>
LinkList <T>::LinkList()
{
}
// 头插法建立单链表
template <class T>
void LinkList <T>::HeadList()
{
first = new Node <T>;
first->next = NULL;
int n;
cout<<"请输入链表元素个数:";
cin>>n;
Node<T> *p;
p=first;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
p=new Node<T>;
cin>>p->data;
p->next=p->next;
p->next=p;
}
Display();
}
// 尾插法建立单链表
template <class T>
void LinkList<T>::HailList()
{ //初始化头结点
first = new Node<T>;
Node<T> *r = first;
cout<<"请输入链表元素个数:";
int n;
cin>>n;
Node<T> *p;
p=first;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
p=new Node<T>;
cin>>p->data;
p->next=p;
p=p;
}
Display();
}
//在线性表的第i个位置上插入值为x的新元素
/*template <class T>
void LinkList<T>::Insert(int i,T x)
{
Node <T> * p = first;//初始化工作指针
if (i != 1) p = Get(i - 1);
//若不是在第一个位置插入,得到第i-1个元素的地址。
if (p)
{
Node <T> * s = new Node <T>;//建立新结点
s->data = x;
s->next = p->next;
p->next = s;//将新结点插入到p所指结点的后面
}
else throw "插入位置错误";
}*/
template<class T>
void LinkList<T>::Insert()//在i处插入e
{
int i,o;
cout<<"请输入在何处插入元素:";
cin>>i;
cout<<"请输入插入元素为:";
cin>>o;
Node <T>*p;
p=first;
int j=0;
while(p&&j<i-1)
{
p=p->next;cout<<"hello";
j++;
}
if(!p||j>i-1)
{
cout<<"插入位置错误";
return;
}
else
{
Node <T>*s;
s=new Node<T>;
s->data=o;
s->next=p->next;
p->next=s;
}
Display();
}
//删除
template <class T>
void LinkList<T>::Delete(int i)
{ //找到编号i-1的结点
Node<T> *p = first;
int j = 0;
while (p->next != NULL && j != i - 1)
{
p = p->next;
j++;
}
if (p->next == NULL)
throw "删除位置非法";
else {
Node<T> *s;
s = p->next;
p->next =s->next;
delete s;
}
}
//得到i处的元素
template <class T>
int LinkList <T>::GetData()
{
int i;
cout << "请输入得到何处的元素:";
cin >> i;
Node<T> *p;
p = first;
int j = 0;
while (p&&j < i - 1)
{
p = p->next;
j++;
}
if (!p || j > i - 1)
{
cout << "寻找位置错误" << endl;
return 0;
}
else
{
cout << i << "处的元素为:" << p->next->data << endl;
return p->data;
}
}
//寻找链表中有无该元素
template<class T>
int LinkList<T>::Search()
{
int obj;
cout << "请输入要查找的元素:";
cin >> obj;
int j = 1;
Node<T> *p;
p = first->next;
while (p&&p->data != obj)
{
p = p->next;
j++;
}
if (p == NULL)
{
cout << "链表中无此元素" << endl;
return 0;
}
else
{
cout << "在该链表中第" << j << "个元素等于" << obj << endl;
}
return j;
}
//计算链表的长度
template<class T>
int LinkList<T>::ListLength()
{
Node <T>*p;
p = first->next;
int j = 1;
while (p)
{
p = p->next;
j++;
}
cout << "该链表的长度为:" << j - 1 << endl;
return j;
}
//销毁单链表
template<class T>
LinkList<T>::~LinkList()
{
Node<T>*p = first;
while (p)
{
first = p;
p = p->next;
delete first;
}
}
//其它功能 输出链表的元素
template<class T>
void LinkList<T>::Display()//输出链表的元素
{
Node<T> *p;
p = first->next;
cout << "该链表的元素依次为";
while (p)
{
int e = p->data;
cout << e << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList<int> t1;
LinkList<int> t2;
int p;
while (1)
{
cout << "请选择链表生成方法:";
cin >> p;
if (p == 1)
{
t1.HeadList();
t1.Insert();
cout << "请输入删除位置";
int d;
cin >> d;
t1.Delete(d);
t1.GetData();
t1.Search();
t1.ListLength();
}
else
{
t2.HailList();
t2.Insert();
cout << "请输入删除位置";
int f;
cin >> f;
t2.Delete(f);
t2.GetData();
t2.Search();
t2.ListLength();
}
}
system("pause");
return 0;
}
#include <iostream>了 可以帮忙改一改吗?
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T> class LinkList
{
public:
LinkList();
void HeadList(); //头插法
void HailList(); //尾插法
void Insert(); //插入元素
void Delete(int i);//删除表中元素
int GetData();//取得表中元素
int Search();//在表中寻找匹配项
int ListLength();//获得表中的长度
void Display();
~LinkList();
private:
Node<T> *first;
};
template <class T>
LinkList <T>::LinkList()
{
}
// 头插法建立单链表
template <class T>
void LinkList <T>::HeadList()
{
first = new Node <T>;
first->next = NULL;
int n;
cout<<"请输入链表元素个数:";
cin>>n;
Node<T> *p;
p=first;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
p=new Node<T>;
cin>>p->data;
p->next=p->next;
p->next=p;
}
Display();
}
// 尾插法建立单链表
template <class T>
void LinkList<T>::HailList()
{ //初始化头结点
first = new Node<T>;
Node<T> *r = first;
cout<<"请输入链表元素个数:";
int n;
cin>>n;
Node<T> *p;
p=first;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
p=new Node<T>;
cin>>p->data;
p->next=p;
p=p;
}
Display();
}
//在线性表的第i个位置上插入值为x的新元素
/*template <class T>
void LinkList<T>::Insert(int i,T x)
{
Node <T> * p = first;//初始化工作指针
if (i != 1) p = Get(i - 1);
//若不是在第一个位置插入,得到第i-1个元素的地址。
if (p)
{
Node <T> * s = new Node <T>;//建立新结点
s->data = x;
s->next = p->next;
p->next = s;//将新结点插入到p所指结点的后面
}
else throw "插入位置错误";
}*/
template<class T>
void LinkList<T>::Insert()//在i处插入e
{
int i,o;
cout<<"请输入在何处插入元素:";
cin>>i;
cout<<"请输入插入元素为:";
cin>>o;
Node <T>*p;
p=first;
int j=0;
while(p&&j<i-1)
{
p=p->next;cout<<"hello";
j++;
}
if(!p||j>i-1)
{
cout<<"插入位置错误";
return;
}
else
{
Node <T>*s;
s=new Node<T>;
s->data=o;
s->next=p->next;
p->next=s;
}
Display();
}
//删除
template <class T>
void LinkList<T>::Delete(int i)
{ //找到编号i-1的结点
Node<T> *p = first;
int j = 0;
while (p->next != NULL && j != i - 1)
{
p = p->next;
j++;
}
if (p->next == NULL)
throw "删除位置非法";
else {
Node<T> *s;
s = p->next;
p->next =s->next;
delete s;
}
}
//得到i处的元素
template <class T>
int LinkList <T>::GetData()
{
int i;
cout << "请输入得到何处的元素:";
cin >> i;
Node<T> *p;
p = first;
int j = 0;
while (p&&j < i - 1)
{
p = p->next;
j++;
}
if (!p || j > i - 1)
{
cout << "寻找位置错误" << endl;
return 0;
}
else
{
cout << i << "处的元素为:" << p->next->data << endl;
return p->data;
}
}
//寻找链表中有无该元素
template<class T>
int LinkList<T>::Search()
{
int obj;
cout << "请输入要查找的元素:";
cin >> obj;
int j = 1;
Node<T> *p;
p = first->next;
while (p&&p->data != obj)
{
p = p->next;
j++;
}
if (p == NULL)
{
cout << "链表中无此元素" << endl;
return 0;
}
else
{
cout << "在该链表中第" << j << "个元素等于" << obj << endl;
}
return j;
}
//计算链表的长度
template<class T>
int LinkList<T>::ListLength()
{
Node <T>*p;
p = first->next;
int j = 1;
while (p)
{
p = p->next;
j++;
}
cout << "该链表的长度为:" << j - 1 << endl;
return j;
}
//销毁单链表
template<class T>
LinkList<T>::~LinkList()
{
Node<T>*p = first;
while (p)
{
first = p;
p = p->next;
delete first;
}
}
//其它功能 输出链表的元素
template<class T>
void LinkList<T>::Display()//输出链表的元素
{
Node<T> *p;
p = first->next;
cout << "该链表的元素依次为";
while (p)
{
int e = p->data;
cout << e << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList<int> t1;
LinkList<int> t2;
int p;
while (1)
{
cout << "请选择链表生成方法:";
cin >> p;
if (p == 1)
{
t1.HeadList();
t1.Insert();
cout << "请输入删除位置";
int d;
cin >> d;
t1.Delete(d);
t1.GetData();
t1.Search();
t1.ListLength();
}
else
{
t2.HailList();
t2.Insert();
cout << "请输入删除位置";
int f;
cin >> f;
t2.Delete(f);
t2.GetData();
t2.Search();
t2.ListLength();
}
}
system("pause");
return 0;
}