2017.4 建立一个循环链表,要求编写插入,删除,状态转移函数,并进行测试

//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;




}

2017.4 建立一个循环链表,要求编写插入,删除,状态转移函数,并进行测试