//2017.4建立一个循环链表,要求编写插入,删除,状态转移函数,并进行测试。
//思路,循环链表,我们用结构体的思路来进行。
#include <iostream>
using namespace std;
typedef struct loop
{
int i;//数据。
loop* pt;//指向结构体单元的指针。
}loop;//建立机构体类型。
//初始化链表。
loop* inis(loop* &a)
{
a=new loop;//分配一个头指针。
a->i=0;
a->pt=a;//指向自己。
return a;
}
//状态函数。
bool isempty(loop* a)
{
if(a==a->pt) return 1;
else return 0;
}
//删除
void del(loop* &a,int x) //删除数据为x的元素。
{
if(isempty(a)) cout<<"nothing to delete;"<<endl;
else
{
loop* t=a->pt;
loop* pr=a;
while(t->i!=x&&t!=a) {pr=t;t=t->pt;}
if(t==a) cout<<"not have x in it!"<<endl;
else
if(t->i==x)
{pr->pt=t->pt;
delete t;}
}
}
void inser(loop *&a,int x) //将x插入到循环链表。
{
loop* p;
p=new loop;
p->i=x;
p->pt=a->pt;
a->pt=p;
}
int main()
{
loop *a;
inis(a);
int b[5]={1,2,3,4,5};
for(int i=0;i<5;i++)//插入一组数据,并且进行输出链表。
inser(a,b[i]);
loop* t=a->pt;
while(t!=a) {cout<<t->i<<" ";t=t->pt;}
del(a,4);//删除元素为4的节点,并且进行输出。
cout<<endl;
t=a->pt;
while(t!=a) {cout<<t->i<<" ";t=t->pt;}
cout<<endl;
cout<<a->i;//头节点的元素输出。
cout<<isempty(a);//判断链表是否空链表。是则返回1,否则返回0;
}
