未雨绸缪🍼 Takerji
关注数: 3 粉丝数: 22 发帖数: 351 关注贴吧数: 16
求助各位大佬 为什么我的这个调试没有 问题 运行几部后 求助各位大佬 为什么我的这个调试没有 问题 运行几部后就出现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; }
1 下一页