#ifndef _CIRCLELINK_H_
#define _CIRCLELINK_H_
#include<iostream>
#include "CircleLink.hpp"
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class CircleLink
{
public:
CircleLink(DataType b[],int n);
~CircleLink();
int Length();
int Locate(DataType x);
Node<DataType> *Index(int i);
DataType Get(int i);
void Insert(int i,DataType x);
DataType Delete(int i);
void print();
private:
int length;
Node<DataType> *first;
};
template<class DataType>
CircleLink<DataType>::CircleLink(DataType a[],int n)
{
Node<DataType> *s,*r;
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=first;
length=n;
}
template<class DataType>
CircleLink<DataType>::~CircleLink()
{
Node<DataType> *p;
int count=0;
while(count!=length)
{
p=first;
first=first->next;
delete p;
}
}
template<class DataType>
int CircleLink<DataType>::Length()
{
return length;
}
template<class DataType>
int CircleLink<DataType>::Locate(DataType x)
{
int count=1;
Node<DataType>*p;
p=first->next;
while(p->data!=x)
{
count++;
p=p->next;
}
return count;
}
template<class DataType>
Node<DataType>* CircleLink<DataType>::Index(int i)
{
Node<DataType> *p;
p=first->next;
for(int j=0;j<i;++j)
{
p=p->next;
}
return p;
}
template<class DataType>
DataType CircleLink<DataType>::Get(int i)
{
DataType x;
Node<DataType> *p;
p=Index(i-1);
x=p->data;
return x;
}
template<class DataType>
void CircleLink<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p,*s;
p=Index(i-1);
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
length++;
}
template<class DataType>
DataType CircleLink<DataType>::Delete(int i)
{
Node<DataType>*p,*s;
DataType x;
p=Index(i-1);
s=p->next;
x=s->data;
p->next=s->next;
delete s;
length--;
return x;
}
template<class DataType>
void CircleLink<DataType>::print()
{
Node<DataType>*p;
p=first->next;
while(p!=first)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
#define _CIRCLELINK_H_
#include<iostream>
#include "CircleLink.hpp"
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class CircleLink
{
public:
CircleLink(DataType b[],int n);
~CircleLink();
int Length();
int Locate(DataType x);
Node<DataType> *Index(int i);
DataType Get(int i);
void Insert(int i,DataType x);
DataType Delete(int i);
void print();
private:
int length;
Node<DataType> *first;
};
template<class DataType>
CircleLink<DataType>::CircleLink(DataType a[],int n)
{
Node<DataType> *s,*r;
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=first;
length=n;
}
template<class DataType>
CircleLink<DataType>::~CircleLink()
{
Node<DataType> *p;
int count=0;
while(count!=length)
{
p=first;
first=first->next;
delete p;
}
}
template<class DataType>
int CircleLink<DataType>::Length()
{
return length;
}
template<class DataType>
int CircleLink<DataType>::Locate(DataType x)
{
int count=1;
Node<DataType>*p;
p=first->next;
while(p->data!=x)
{
count++;
p=p->next;
}
return count;
}
template<class DataType>
Node<DataType>* CircleLink<DataType>::Index(int i)
{
Node<DataType> *p;
p=first->next;
for(int j=0;j<i;++j)
{
p=p->next;
}
return p;
}
template<class DataType>
DataType CircleLink<DataType>::Get(int i)
{
DataType x;
Node<DataType> *p;
p=Index(i-1);
x=p->data;
return x;
}
template<class DataType>
void CircleLink<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p,*s;
p=Index(i-1);
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
length++;
}
template<class DataType>
DataType CircleLink<DataType>::Delete(int i)
{
Node<DataType>*p,*s;
DataType x;
p=Index(i-1);
s=p->next;
x=s->data;
p->next=s->next;
delete s;
length--;
return x;
}
template<class DataType>
void CircleLink<DataType>::print()
{
Node<DataType>*p;
p=first->next;
while(p!=first)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
#endif
#include "CircleLink.hpp"
int main()
{
int a[]={1,2,3,4,5,6,7};
CircleLink<int> Link(a,7);
Link.print();
int len=Link.Length();
cout<<len<<endl;
int loc=Link.Locate(6);
cout<<loc<<endl;
int x=Link.Get(5);
cout<<x<<endl;
Link.Insert(4,9);
Link.print();
return 0;
}