| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖
标题:单链表找错!!简单的我还是不会!1
只看楼主 加入收藏
lzywin
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2009-11-11
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:5 
单链表找错!!简单的我还是不会!1
#include<iostream.h>//使用cout,cin,cerr
#include<stdlib.h>//使用exit(1)

template<class T>
struct LinkNode{
    T data;
    LinkNode<T> *link;
    LinkNode(LinkNode<T> *ptr=NULL){ link=ptr; }
    LinkNode(const T &item,LinkNode<T> *ptr=NULL)
    { data=item; link=ptr; }
};

template<class T>
class List{
    public:
        //实验题2.19
        List(){ first=new LinkNode<T>; }//无参数构造函数
        List(const T &x){ first=new LinkNode<T>(x); }
//有参数构造函数,赋值头结点
        List(List<T> &L);//复制构造函数
        ~List(){ makeEmpty(); delete first; }//析构函数
        void makeEmpty();//清空单链表函数
        bool IsEmpty()const{// 判表空函数
            return first->link==NULL;}
        LinkNode<T> *getHead()const{ return first; }//返回附加头结点地址函数
        void setHead(LinkNode<T> *p){//设置附加头结点地址函数
            makeEmpty();
            delete first;
            first=p;
        }
        void inputFront(T endTag);//前插法建立单链表函数。输入
        void inputRear(T endTag);//后插法建立单链表函数。输入
        void output();//输出函数
    private:
        LinkNode<T> *first;
};

#include"02_19_060List.h"
template<class T>
List<T>::List(List<T>&L){
T value;
LinkNode<T>*srcptr=L.getHead();
LinkNode<T>*destpr=first=new LinkNode<T>;
while (srcptr->link!=NuLL){
   value = srcptr->link->data;
destptr->link=new LinkNode<T>(value);
destptr=destptr->link;
srcptr =srcptr->link;
}
Destptr->link=NULL;
};


//清空单链表函数的实现;
template<class T>
void List<T>::makeEmpty(){
LinkNode<T> *q;
while (first->link!=NULL){
q = first->link;
first->link=q->link;
delete q;
}
};

//前插法建立单链表函数的实现;
template<class T>
void List<T>::inputFront(T endTag){
LinkNode<T>*newNode;T val;
first =new LinkNode<T>;
if (first==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
cin>>val;
while (val!=endTag){
newNode=new LinkNode<T>(val);
if(newNode ==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
newNode->link=first->link;
first->link=newNode;
cin>>val;
}
};


//后插法建立单链表函数的实现;
template <class T>
void List <T>::inputRear(T endTag){
LinkNode<T>* newNode,*last;T val;
first = new LinkNode<T>;
if (first == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
last->link = newNode;last=newNode;last=newNode;
cin>> val; last=first;
while (val!=endTag){
    newNode=new LinkNode<T>(val);
    if(newNode == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
    last->link = newNode; last = newNode;
    cin>>val;
}
last->link=NULL;
};


//输出函数的实现。
template<class T>
void List<T> :: output(){
LinkNode<T> *current=first->link;
while (current!=NULL){
cout<<current->data<<endl;
current=current->link;
}
};

#include"02_19_060List.h"
void main(){
    //测试inputFront,output
    List<int> L1;
    cout<<"前插法建立单链表(1000为结束输入标志):"<<endl;
L1.inputFront(1000);//输入一组不等于1000的整数
    L1.output();  cout<<endl;
    //测试inputRear
    List<int> L2;
    cout<<"后插法建立单链表(1000为结束输入标志):"<<endl;
L2.inputRear(1000);//输入一组不等于1000的整数
    L2.output();  cout<<endl;
    //测试复制构造函数
    List<int> L3(L2);
    L3.output();  cout<<endl;
    //测试makeEmpty
    L3.makeEmpty();
    L3.output();
}
调试没错 编译有错唉~~!!1
搜索更多相关主题的帖子: 单链 
2009-11-14 20:53
coolman366
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2009-11-14
收藏
得分:5 
用类模板应该把实现方法写在头文件里面,就是cpp文件并入.h文件里面
2009-11-14 21:15
coolman366
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2009-11-14
收藏
得分:0 
而且我不知道成员函数的实现方法后面加封号干吗
2009-11-14 21:17
lzywin
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2009-11-11
收藏
得分:0 
我不会
2009-11-14 21:30
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:5 
#include<iostream.h>//使用cout,cin,cerr
#include<stdlib.h>//使用exit(1)

template<class T>
struct LinkNode{
    T data;
    LinkNode<T> *link;
    LinkNode(LinkNode<T> *ptr=NULL){ link=ptr; }
    LinkNode(const T &item,LinkNode<T> *ptr=NULL)
    { data=item; link=ptr; }
};

template<class T>
class List{
    public:
        //实验题2.19
        List(){ first=new LinkNode<T>; }//无参数构造函数
        List(const T &x){ first=new LinkNode<T>(x); }
//有参数构造函数,赋值头结点
        List(List<T> &L);//复制构造函数
        ~List(){ makeEmpty(); delete first; }//析构函数
        void makeEmpty();//清空单链表函数
        bool IsEmpty()const{// 判表空函数
            return first->link==NULL;}
        LinkNode<T> *getHead()const{ return first; }//返回附加头结点地址函数
        void setHead(LinkNode<T> *p){//设置附加头结点地址函数
            makeEmpty();
            delete first;
            first=p;
        }
        void inputFront(T endTag);//前插法建立单链表函数。输入
        void inputRear(T endTag);//后插法建立单链表函数。输入
        void output();//输出函数
    private:
        LinkNode<T> *first;
};

#include"02_19_060List.h"//这一句也去掉
template<class T>
List<T>::List(List<T>&L){
T value;
LinkNode<T>*srcptr=L.getHead();
LinkNode<T>*destpr=first=new LinkNode<T>;//这个地方错了,该是destptr
while (srcptr->link!=NuLL){
   value = srcptr->link->data;
destptr->link=new LinkNode<T>(value);
destptr=destptr->link;
srcptr =srcptr->link;
}
Destptr->link=NULL;
};


//清空单链表函数的实现;
template<class T>
void List<T>::makeEmpty(){
LinkNode<T> *q;
while (first->link!=NULL){
q = first->link;
first->link=q->link;
delete q;
}
};

//前插法建立单链表函数的实现;
template<class T>
void List<T>::inputFront(T endTag){
LinkNode<T>*newNode;T val;
first =new LinkNode<T>;
if (first==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
cin>>val;
while (val!=endTag){
newNode=new LinkNode<T>(val);
if(newNode ==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
newNode->link=first->link;
first->link=newNode;
cin>>val;
}
};


//后插法建立单链表函数的实现;
template <class T>
void List <T>::inputRear(T endTag){
LinkNode<T>* newNode,*last;T val;
first = new LinkNode<T>;
if (first == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
last->link = newNode;last=newNode;last=newNode;
cin>> val; last=first;
while (val!=endTag){
    newNode=new LinkNode<T>(val);
    if(newNode == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
    last->link = newNode; last = newNode;
    cin>>val;
}
last->link=NULL;
};


//输出函数的实现。
template<class T>
void List<T> :: output(){
LinkNode<T> *current=first->link;
while (current!=NULL){
cout<<current->data<<endl;
current=current->link;
}
};

#include"02_19_060List.h"//这一句没有用的,可以去掉
void main(){
    //测试inputFront,output
    List<int> L1;
    cout<<"前插法建立单链表(1000为结束输入标志):"<<endl;
L1.inputFront(1000);//输入一组不等于1000的整数
    L1.output();  cout<<endl;
    //测试inputRear
    List<int> L2;
    cout<<"后插法建立单链表(1000为结束输入标志):"<<endl;
L2.inputRear(1000);//输入一组不等于1000的整数
    L2.output();  cout<<endl;
    //测试复制构造函数
    List<int> L3(L2);
    L3.output();  cout<<endl;
    //测试makeEmpty
    L3.makeEmpty();
    L3.output();
}

Anything is possible!
2009-11-14 22:33
lzywin
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2009-11-11
收藏
得分:0 
用此单链表再用递归和非递归的方法搜索单链表的最后一个结点的程序怎么弄啊?
2009-11-15 02:00
快速回复:单链表找错!!简单的我还是不会!1
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030364 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved