循环链表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;
}
#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
- C实现的循环链表排序
- C语言实现双向循环链表
- c实现逆转单向循环链表
- 循环链表C语言实现
- c双向循环链表实现
- C语言实现双向循环链表
- 【数据结构】实现循环链表(c++)
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言循环链表实现
- 数据结构--双向循环链表C实现
- C语言双向循环链表实现
- 用C语言实现循环链表
- 单向循环链表C语言实现
- 循环链表的C语言实现
- C语言实现双向循环链表
- 【C++】实现双向循环链表
- c语言实现单向循环链表
- NYOJ 题目119士兵杀敌(三)(RMQ)
- Oracle函数总结
- 安装MongoDB和简单使用
- Canvas学习--绘制五角星(一)
- 【深入浅出IOS开发】创建Model类型Controller
- 循环链表c++实现
- 常用正则表达式
- 键盘处理
- 通知(Notification)
- 高级js代码
- Python中的string模块详解——string的中文API文档
- 搜索框
- ioss 8.1 to 8.2 api differences
- Otto源码分析