《数据结构》同学链表程序的调试修改代码示例(有代表性,请看看

下面是一个同学的程序,自己不能调试通过。现将调试修改代码示众,让大家学习。并讨论。

请大家注意红色字体注释。大多是粗心错误;不知道C++是选样学的。

原程序链接:http://blog.csdn.net/z1094219402/article/details/40559877

#include<iostream> ?

using namespace std; ?

//下面原来是单独存于头文件的 内容,现在放在一起

#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> ?
//因放到一个文件这些上面有

//using namespace std; ?

//#include”LinkList.h” ?
//因代码在一个文件里,去掉这行

??

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”location”; ?

? ? else

{ ?? ? ?s=new Node<DataType>;
?//这里改了原来是NodeV

? ? ? ? s->data=x; ? ? ? ? ? ? ?
?//这里改了原来是s

? ? ? ? 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”location” ;
//这里加了一个;?

? ? else{ ?

? ? ? ? q=p->next;x=q->data; ?

? ? ? ? p->next=q->next; ?

? ? ? ? delete q; ?

? ? ? ? return x;
?//这里改了原来是q

? ? } ?

} ?

??

template<class DataType> ?

int LinkList<DataType>::Locate (DataType x) ?

{ ??Node<DataType> * p=first->next; ?

? ? int count=1;
?//这里改了,原来是小写L,是数字1

? ? while(p!=NULL) ?

? ? { ?

? ? ? ? if(p->data==x) return count; ?

? ? ? ? p=p->next; ?

? ? } ?

? ? return 0; ?

} ?

??

template<class DataType> ?

void LinkList<DataType>::PrintList () ?

{ ?

? ? Node<DataType> * p=first->next; ?

? ? while(p!=NULL) ?

? ? {?? cout<<p->data<<” “; ?

? ? ? ? p=p->next; ?

? ? } ?

? ? cout<<endl; ?

} ?

//主程序内容

//#include<iostream> ?//因放到一个文件这些上面有

//using namespace std; ?

//#include”LinkList.cpp” ?//因代码在一个文件里,去掉这行

void main() ?

{ ??int r[5]={1,2,3,4,5}; ?

? ? LinkList<int>L(r,5);
?//这里改了,原来是linklist

? ? cout<<“show the data that are before inserting: “<<endl; ?

? ? L.PrintList(); ?

? ? try ?

? ? { ?

? ? ? ? L.Insert(2,3); ?

? ? } ?

? ? catch (char * s) ?

? ? { ?

? ? ? ? cout<<s<<endl; ?

? ? } ?

? ? cout<<“apply the order that insert the data and show them: “<<endl; ?

? ? L.PrintList(); ?

? ? cout<<“the location of the element whose number is 5 directs: “; ?

? ? cout<<L.Locate(5)<<endl; ?

? ? cout<<“show the data that are infron the operation of delection: “<<endl; ?

? ? L.PrintList(); ?

? ? try ?

? ? { ?

? ? ? ? L.Delete(1);
?//这里原来是delect(1;)

? ? } ?

? ? catch(char * s) ?

? ? { ?

? ? ? ? cout<<s<<endl; ?
//这里改了 原来是end ? ? ? } ? ? ? L.PrintList(); ? ? } ?

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注