注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

数据结构实现两个集合的合并问题------顺序储存 a+b---》A  

2014-09-27 16:43:17|  分类: 数据结构---严老 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include "StdAfx.h"
#include"tuowenjian.h"
#include"strut.h"

int main()
{
List La,Lb;
int i;
int j;
i=InitList(La);
if(i==1) // 创建空表La成功
for(j=1;j<=5;j++) // 在表La中插入5个元素
ListInsert(La,j,j);
printf("La= "); // 输出表La的内容
ListTraver(La,print);
InitList(Lb); // 也可不判断是否创建成功
for(j=1;j<=5;j++) // 在表Lb中插入5个元素
ListInsert(Lb,j,2*j);
printf("Lb= "); // 输出表Lb的内容
ListTraver(Lb,print);
Union(La,Lb);
printf("new La= "); // 输出新表La的内容
ListTraver(La,print);
cin>>i;
return 0;
}

#include<stdio.h>
#include<iostream>
using namespace std;
#define Max 10
#define Increase 3
struct List
{
int *Eleme;
int Size;
int Length;
};
int InitList(List &e)
{
e.Eleme=(int *)malloc(Max*sizeof(List));
if(e.Eleme==NULL)
{
cout<<"fenpeierror"<<endl;
return 0;

}
else
{
e.Length=0;
e.Size=Max;
/*for(int i=0;i<Max;i++)
{
e.Eleme[i]=i;
}*/
return 1;
}

}
bool DestroyList(List &e)
{
free(e.Eleme);
e.Length=0;
e.Size=0;
e.Eleme=NULL;
return 1;
}
bool ClearList(List &e)
{
e.Eleme=NULL;//不知到需要不需要这样的去处理我们的这个问题呢?
e.Length=0;
return 1;
}
bool EmptyList(List &e)
{
if(e.Length!=0)
{
return 0;
}
return 1;
}
int LengthList(List &e)
{
return e.Length;
}
bool GetElement(List &e,int i,int &j)//返回我们的第i个元素的结果的大小
{
if(i>e.Length||i<1)
{
return false;
}
j=*(e.Eleme+i-1);
return true;
}
int LocateElement(List &l,int e,bool (*compare)(int,int ))//是否找到我们要找的元素,返回他所在的位置,否者返回false;
{
int i=1;
int *p;
p=l.Eleme;
while(i<=l.Length&&!compare(*p++,e))
{
i++;//不正确就跟我增加1;
}
if(i<=l.Length)
{
return i;
}
return false;

}
bool PriorELement(List &l,int cur_e,int &pri_e)//返回前去的元素
{
int i=2;//为什么我要从第二个开始呢?因为这样可以解决我们的第一个不是的问题啊
int *p;
p=l.Eleme+1;//从第二个位置开始,第一个就没得我们的前驱的啊!
while(i<=l.Length&&*p!=cur_e)
{
i++;
p++;
}
if(i>l.Length)
{
return false;
}
p--;
pri_e=*p;
return true;

}
bool NextElement(List &l,int cur_e,int &Next_e)
{
int i=1;
int *p=l.Eleme;
while(i<l.Length&&*p!=cur_e)
{
i++;
p++;
}
if(i==l.Length)
{
return false;
}
p++;
Next_e=*p;
return true;
}
bool ListInsert(List &l,int i,int e)//在我们的第i个位置插入元素e;
{
int *newbase,*p,*q;
if(i>l.Length+1||i<1)
{
return false;
}
if(l.Length>=l.Size)
{
newbase=(int *)realloc(l.Eleme,(Increase+Max)*sizeof(List));
if(!newbase)
{
cout<<"新建空间失败!"<<endl;
return false;

}
l.Eleme=newbase;
l.Size+=Increase;
}
q=l.Eleme+i-1;//插入时的位置,!!!!!
for(p=l.Eleme+l.Length-1;p>=q;--p)
{
*(p+1)=*p;// 插入位置及之后的元素右移
}
*q=e;
l.Length++;
return true;
}
bool ListDlete(List &l,int i,int &e)//e 为即将删除的元素
{
int *p,*q;
if(i<1||i>l.Length)
{
return false;
}
p=l.Eleme+i-1;
q=l.Eleme+l.Length-1;
e=*p;
for(++p;p<=q;p++)
{
*(p-1)=*p;
}
l.Length--;
return true;
}
bool ListTraver(List &l,void(*vi)(int))
{
int *p;
p=l.Eleme;
for(int i=1;i<=l.Length;i++)
{
vi(*p);
//printf("%d",*p);
++p;
}
cout<<endl;
return true;
}
bool Equal(int x,int y)
{
if(x==y)
{
return true;
}
return false;
}
void print(int x)
{
printf ("%d ",x);
}
void Union(List &la,List lb)
{
int a=la.Length;
int b=lb.Length;
int e;
int i=1;
for(;i<=b;i++)
{
GetElement(lb,i,e);// 取Lb中第i个数据元素赋给e
if(!LocateElement(la,e,Equal)) // La中不存在和e相同的元素,则插入之
ListInsert(la,++a,e);// // La中不存在和e相同的元素,则插入之在末尾;
}
}


  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017