| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:整和链表的问题
取消只看楼主 加入收藏
lxstring
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
 问题点数:0 回复次数:3 
整和链表的问题

以下为我的代码:
template <class T>class link{
public:
link<T> *insert(T val);
private:
link(T linkValue,link<T> *nextPtr);
link(const link<T> &source);
link<T> *duplicate()const;

T value;
link<T> *ptrToNextLink;
friend class list<T>;
friend class listIterator<T>;
};

template<class T> link<T>* link<T>::insert(T val){
ptrToNextLink = new link<T>(val,ptrToNextLink);
return ptrToNextLink;
}

template<class T> link<T>::link(T val,link<T> *nxt)
:value(val),ptrToNextLink(nxt){

}

template<class T> link<T>::link(const link<T> &source)
:value(source.value),ptrToNextLink(source.ptrToNextLink){

}


template<class T> link<T> *link<T> ::duplicate()const{
link<T>* newlink;
if (ptrToNextLink != 0)
newlink = new link<T>(value,ptrToNextLink->duplicate());
else
newlink = new link<T>(value,0);
return newlink;
}

/*----------------------------------------------------*/

template <class T> class list{
public:
list();
list(const list<T>& source);
virtual ~list();
virtual void add(T value);
virtual void deleteAllValues();
T firstElement() const;
virtual int includes(T value) const;
int isEmpty() const;
virtual void removeFirst();
list<T> *duplicate()const;
private:
link <T> *ptrToFirstLink;
friend class listIterator<T>;
};

template <class T> list<T>::list()
:ptrToFirstLink(0){

}

template <class T> list<T>::list(const list<T> &source){
if (source.isEmpty())
ptrToFirstLink = 0;
else{
link<T> *firstLink = source.ptrToFirstLink;
ptrToFirstLink = firstLink->duplicate();
}
}


template <class T> list<T>::~list(){
deleteAllValues();
}

template <class T> void list<T>::add(T val){
ptrToFirstLink=new link<T>(val,ptrToFirstLink);
}

template <class T> void list<T>::deleteAllValues(){
link<T>* next;
for(link<T> *p=prtToFirstLink;p!=0; p=next){
next=p->ptrToNextLink;
p->ptrToNextLink = 0;
delete p;
}
prtToFirstLink = 0;
}

template <class T> T list<T>::firstElement()const{
return ptrToFirstLink->value;
}

template <class T> int list<T>::includes(T v)const{
for (link<T> *p=prtToFirstLink;p;p=p->ptrToNextLink)
if (v == p->value) return 1;
return 0;
}

template <class T> int list<T>::isEmpty() const{
return ptrToFirstLink==0;
}

template <class T> void list<T>::removeFirst(){
link<T> *p = ptrToFirstLink;
ptrToFirstLink = p->ptrToNextLink;
delete p;
}

template <class T> list<T> *list<T>::duplicate() const{
list<T> *newlist = new list<T>;
if (ptrToFirstLink)
newlist->ptrToFirstLink = ptrToFirstLink->duplicate();
return newlist;
}

/*----------------------------------------------------*/
template<class T>class listIterator:public iterator<T>{
public:
listIterator(list<T>& aList);
virtual int init();
virtual T operator()();
virtual int operator!();
virtual int operator++();
virtual void operator=(T value);
void removeCurrent();
void addBefore(T newValue);
void addAfter(T newValue);
protected:
link<T>* currentLink;
link<T>* previousLink;
list<T>& theList;
};

template<class T> listIterator(list<T>& aList)
:theList(aList){
init();
}

template<class T> init listIterator<T>::init(){
previousLink==0;
currentLink=theList.ptrToFirstLink;
return currentLink!=0;
}

template<class T> listIterator::operator()(){
return currentLink->value;
}

template<class T>int listIterator<T>::opeartor!(){
if(currentLink!=0)
return 1;
if(previousLink!=0)
return previousLink->ptrToNextLink!=0;
return theList.ptrToFirstLink!=0;
}

template<class T>int listIterator<T>::operator++(){
if(currentLink==0){
if(previousLink==0)
currentLink=thrList.ptrToFirstLink;
else
currentLink=previousLink->ptrToNextLink;
}
else{
previousLink=currentLink;
currentLink=currentLink->ptrToNextLink;
}
return currentLink!=0;
}

template<class T>void listIterator<T>::operator=(T val){
currentLink->value=val;
}

template<class T>void listIterator<T>::removecurrent(){
if(previousLink==0)
theList.ptrToFirstLink=currentLink->ptrToNextLink;
else
previousLink->ptrToNextLink=currentLink->ptrToNextLink;
delete currentLink;
currentLink=0;
}

template<class T>void listIterator<T>::addBefore(T val){
if(previousLink)
previousLink=previousLink->insert(val);
else{
theList.List<T>::add(val);
previousLink=theLink.ptrToFirstLink;
}
}

template<class T> void listIterator<T>::addAfter(T val){
if(currentLink!=0)
currentLink->insert(val);
else if(previousLink!=0)
previousLink->insert(val);
else theList.List<T>::add(val);
}

/*----------------------------------------------*/

#include<iostream.h>

template <class T>class iterator{
public:
virtual int init()=0;
virtual int operator !()=0;
virtual T operator()()=0;
virtual int operator ++()=0;
virtual void operator=(T newValue)=0;
};


这是我写的4个类,但我不知道如何整和他们,使他们形成一个链表,并且可以遍历整个链表

搜索更多相关主题的帖子: 链表 
2006-10-24 22:16
lxstring
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 
自己顶下,大家都来看看,帮忙想个方法~~~~
2006-10-24 22:23
lxstring
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 
可能放错地方了~~
我应该放在数据结构里~~
2006-10-24 22:26
lxstring
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 

给点反映啊~~
哎,难道没人会吗?

2006-10-25 10:12
快速回复:整和链表的问题
数据加载中...
 
   



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

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