循环链表c++实现

来源:互联网 发布:来深圳做销售知乎 编辑:程序博客网 时间:2024/06/15 11:31
#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;
}

#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;
}

0 0
原创粉丝点击