#include <iostream>
#include <stdio.h>
using namespace std;
template<typename T>
class Node{
public:
T data;
Node<T>* next;
Node<T>* last;
Node(T d=0) {data=d;cout<<"Node Constructor run"<<endl;}
Node(Node<T> &n) {data=n.data;next=n.next;cout<<"Node CopyConstructor run"<<endl;}
~Node() {cout<<"Node Destructor run"<<endl;}
T getData() {return data;}
};
template<typename T>
class LinkList
{
private:
Node<T> headNode; //头结点
Node<T>* position; //游标
int S;
public:
LinkList(T *x,int size)
{
int i;
Node<T>* p;
p=&headNode;
headNode.last=NULL;
for(i=0;i<size;i++)
{
position=new Node<T>(x[i]);
position->last=p;
p->next=position;
p=position;
}
p->next=NULL;
S=size;
cout<<"LinkList Constructor run"<<endl;
}
LinkList(LinkList<T> &y)
{
int i;
S=y.S;
Node<T>* p;
Node<T>* yy=y.headNode.next;
p=&headNode;
headNode.last=NULL;
for(i=0;i<S;i++)
{
position=new Node<T>(yy->getData());
p->next=position;
position->last=p;
p=position;
yy=yy->next;
}
p->next=NULL;
position=headNode.next;
cout<<"LinkList CopyConstructor run"<<endl;
}
~LinkList()
{
Node<T>* p;
p=headNode.next;
for(int i=0;i<S;i++)
{
position=p;
p=position->next;
delete position;
}
cout<<"LinkList Destructor run"<<endl;
}
void insertNode(Node<T> &n) //在游标位置后插入一个同类型结点n
{
n.next=position->next;
position->next=&n;
S++;
}
int searchNode(T value) //在链表中查找数据域等于value的结点,若查找成功的同时修改游标位置。
{
int i;
Node<T>* p=headNode.next;
for(i=0;i<S;i++)
{
if(p->getData()==value)
{position=p;return 1;}
p=p->next;
}
return 0;
}
void next()//使游标移动到下一个结点
{
if(position->next!=NULL)
position=position->next;
}
Node<T>& currNode()const //返回当前结点。
{
return *position;
}
void delNode() //移除当前结点
{
Node<T> *t=position;
if(position->next==NULL)
{
position=position->last;
position->next=NULL;
}
else
{
t->last->next=t->next;
t->next->last=t->last;
position=position->last;
}
S--;
}
void show() //输出链表。
{
int i;
Node<T> *p=headNode.next;
for(i=0;i<S;i++){
cout<<"["<<p->getData()<<"]";
p=p->next;
}
cout<<endl;
}
int getSize() //返回链表中的元素个数
{
return S;
}
};
int main()
{
int i,a[5]= {0,1,2,3,4};
for(i=0;i<5;i++)
scanf("%d",&a[i]);
LinkList<int> l1(a,5),l2(l1);
cout<<l2.getSize()<<endl;
l1.show();
if (l2.searchNode(2))
cout<<"Found:"<<l2.currNode().getData()<<endl;
else
cout<<"Not Found"<<endl;
l2.delNode();
Node <int> *p1=new Node<int>(11);
l2.insertNode(*p1);
l2.show();
return 0;
}
C++单向链表模板类
猜你喜欢
转载自blog.csdn.net/y0205yang/article/details/120277433
今日推荐
周排行