单链表中重复元素的删除;单链表的就地逆置.
[cpp]/**a. 编写文件LinkNode.h和Linklist.h,定义单链表类模板Linklist,以及其上的TailInsert、遍历及初始化等操作。
b. 利用带头结点的单链表结构,在Linklist.h文件中添加两个成员函数:
(1) Delete(Linklist<int> &L)用于实现单链表中重复元素的删除;
(2) Reverse(Linklist<int> &L)用于实现单链表的就地逆置(即在原表的存储空间实现元素的逆置)。
编写算法Print(const int &)用于实现数据元素的输出。
*/ www.zzzyk.com
#include<iostream>
#include"LinkList.h"
using namespace std;
void print(const int& e)
{
cout<<e<<" ";
}
int main()
{
LinkList<int> lt;
int array[12] = {2,3,3,4,5,5,7,8,8,9,10,23};
for(int i = 0;i <= 11;i++)
{
cout<<array[i]<<" ";
lt.Append(array[i]);
}
cout<<endl;
lt.Reverse();
lt.Traverse(print);
cout<<endl;
lt.Delete();
lt.Traverse(print);
return 0;
}
/***************头文件***************/
#include<iostream>
template<class T>
struct LinkNode
{
T data;
LinkNode<T> *next;
};
template<class T>
class LinkList
{
public:
LinkList();
LinkList(const LinkList<T>&);
~LinkList();
bool IsEmpty()const{return len<=0;}
int Length()const{return len;}
void Clear();
bool GetElem(T&,int)const;
bool SetElem(const T&,int);
int LocateElem(const T&)const;
int LocatePrior(const T&)const;
int LocateNext(const T&)const;
bool Insert(const T&,int);
bool Append(const T&);
bool Delete(T&,int);
void Traverse(void(*visit)(const T&))const;
LinkList<T>& operator=(const LinkList<T>&);
void Delete();
void Reverse();
private:
int len;
LinkNode<T> *head;
LinkNode<T> *tail;
void CopyFrom(const LinkList<T>&);
};
using namespace std;
template<class T>
LinkList<T>::LinkList()//默认构造函数
{
len=0;
head=tail=new LinkNode<T>;
head->next=NULL;
}
template<class T>
LinkList<T>::LinkList(const LinkList<T>& r)//拷贝构造函数
{
CopyFrom(r);
}
template<class T>
LinkList<T>::~LinkList()//析构函数
{
Clear();
delete head;
}
template<class T>
void LinkList<T>::Clear()//清空链表
{
LinkNode<T>* p=head->next,*q;
while(p)
{
q=p->next;
delete p;
p=q;
}
tail=head;
head->next=NULL;
len=0;
}
template<class T>
bool LinkList<T>::GetElem(T&e,int i)const//获得第i位的元素
{
if(i<1 || i>len)
return false;
LinkNode<T> *p=head->next;
int k=1;
while(k<i)
{
p=p->next;
k++;
}
e=p->data;
return true;
}
template<class T>
bool LinkList<T>::SetElem(const T&e,int i)//设置第i位置的元素为e
{
if(i<1 || i>len)
return false;
LinkNode<T> *p=head->next;
int k=1;
while(k<i)
{
p=p->next;
k++;
}
p->data=e;
return true;
}
template<class T>
int LinkList<T>::LocateElem(const T&e)const
{
int i=1;
LinkNode<T> *p=head->next;
while(p && p->data!=e)
{
i++;
p=p->next;
}
if(p)
return i;
return 0;
}
template<class T>
int LinkList<T>::LocatePrior(const T&e)const
{
int i=LocateElem(e);
if(i>1)
return i-1;
else
return 0;
}
template<class T>
int LinkList<T>::LocateNext(const T&e)const
{
int i=LocateElem(e);
if(i>=1 && i<len)
return i+1;
else
return 0;
}
template<class T>
bool LinkList<T>::Insert(const T&e,int i)
{
LinkNode<T> *p,*q;
int k=1;
if(i<1 || i>len+1)
return false;
q=new LinkNode<T>;
q->data=e;
p=head;
 
补充:软件开发 , C++ ,