单循环链表的 操作-----引用做参数 + 求集合的并集

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

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值