#include<iostream>
using namespace std;
typedef int datatype;
typedef struct node
{
datatype data;
node * next;
}linknode;
typedef linknode* linklist;
void Init(linklist &l) //初始化
{
l=new linknode;
l->next=l;
}
int ListEmpty_CL(linklist l)// 空不空
{
if(l=l->next)
return 1;
else
return 0;
}
int ListLength_CL(linklist l) //长度
{
int i=0;
linklist p=l->next;
while(p!=l)
{
i++;
p=p->next;
}
return i;
}
int GetElem_CL(linklist l,int i,int &e)
{
if(i<0||i>ListLength_CL(l)-1)
return 0;
linklist p=l; int j=0;
while(j<=i)
{
p=p->next;
j++;
}
e=p->data;
return 1;
}
void Insert(linklist* l,datatype i,datatype e)
{
int j=0; linklist pl=(*l);
while(j<i)
{
(pl)=(pl)->next;
j++;
}
linklist s=new linknode;
s->data=e;
s->next=(pl)->next;
(pl)->next=s;
//(pl)=s;
}
datatype PriorElem_CL(linklist l, datatype cur_e, datatype& pre_e)
{
linklist p=l;
linklist pq=l->next;
while(pq!=l)
{
if(pq->data==cur_e)
pre_e=p->data;
pq=pq->next;
p=p->next;
}
return 0;
}
int ListDelete_CL(linklist&l,int i,int& e)
{
int j=0;linklist p=l; linklist pq;
while(j<i)
{
p=p->next;
j++;
}
if(p->next->next==l)
{
e=p->next->data;
p->next=l;
delete(p->next);
return 1;
}
e=p->next->data; pq=p->next ->next;
delete(p->next);
p->next=pq;
return 1;
}
void travellinknode(linklist &l)
{
linklist p=l->next;
while(p!=l)
{
cout<<p->data<<" ";
cout<<endl;
p=p->next;
}
}
int main()
{
linklist l; int e;
Init(l);
Insert(&l,0,0);
Insert(&l,1,1);
Insert(&l,2,2);
Insert(&l,3,3);
Insert(&l,4,4);
Insert(&l,5,5);
travellinknode (l);
cout<<ListLength_CL(l)<<endl;
GetElem_CL(l,0,e);
cout<<e<<endl;
PriorElem_CL(l,2, pre_e);
cout<<pre_e<<endl;
ListDelete_CL(l,4,e);
travellinknode (l);
cout<<e<<endl;
return 0;
}
---------------------------------------------------------------
两个集合,求两集合的并集(单循环链表实现ps:方法很暴力)
#include<iostream>
using namespace std;
typedef char datatype;
typedef struct node
{
datatype data;
node* next;
}listnode;
typedef listnode* linklist;
void Initial(linklist& l)
{
l=new listnode;
l->next=l;
}
int ListEmpty_CL(linklist l)
{
if(l=l->next)
return 1;
else
return 0;
}
void Insert(linklist* l,datatype i,datatype e)
{
int j=0; linklist pl=(*l);
while(j<i)
{
(pl)=(pl)->next;
j++;
}
linklist s=new listnode;
s->data=e;
s->next=(pl)->next;
(pl)->next=s;
}
int ListLength_CL(linklist l)
{
int i=0;
linklist p=l->next;
while(p!=l)
{
i++;
p=p->next;
}
return i;
}
void travellinknode(linklist &l)
{
linklist p=l->next;
while(p!=l)
{
cout<<p->data<<" ";
cout<<endl;
p=p->next;
}
}
void union_l (linklist & la, linklist & lb)
{
if(ListEmpty_CL(la))
la=lb;
else
{
linklist pa,pb,lla;
lla=la->next; pb=lb; lb=lb->next;
int length= ListLength_CL(la);
while(lb!=pb)
{ pa=lla;
while(pa!=la && pa->data!=lb->data)
{pa=pa->next;}
if(pa==la) {Insert(&la,length,lb->data);length++;}
lb=lb->next;
}
}
}
int main()
{
linklist la,lb; int m,n; datatype s;
Initial(la); Initial(lb);
cin>>m;
for(int i=0;i<m;i++)
{
cin>>s;
Insert(&la,i,s);
} cout<<ListLength_CL(la)<<endl;
cin>>n;
for(i=0;i<n;i++)
{
cin>>s;
Insert(&lb,i,s);
}
union_l (la,lb);
travellinknode(la);cout<<"======"; cout<<ListLength_CL(la)<<endl;
return 0;
}