您的位置:首页 > 其它

线性表的顺序表 实现,及应用-----西文排序+前m个元素和后n个元素进行整体互换+构造纯集合+有序表求纯集合+循环有序链表表示两集合的并集

2013-04-13 22:22 786 查看
#include<iostream>

using namespace std;

const list_size=10;

const listincreament=10;

typedef char datatype;

typedef struct

{

datatype* a; // 为了可以扩张存储单元,设置成这个指针变量,指向地址的。

int length;

int listsize;

int incrementsize;

}sqlist;

void InitList(sqlist &l,int maxsize=list_size,int increasize=listincreament)

{

l.a=new datatype[maxsize];

l.length =0;

l.listsize=maxsize;

l.incrementsize =increasize;

}



void increament(sqlist&l )

{

datatype *a;

a=new datatype[l.listsize+l.incrementsize];

for(int i=0;i<l.listsize;i++)

{

a[i]=l.a[i];

}

l.a=a;

delete []l.a;

l.listsize+=l.incrementsize;

}



void listinsert(sqlist & l,int i,char e)

{

//if(l.length>=l.listsize)

// increment(l);



for(int j=l.length-1;j>=i;j--)

{

l.a[j+1]=l.a[j] // *(l.a+j+1)=*(l.a+j);

}

l.a*(l.a+i)=e;

l.length ++;

}

int compare(sqlist la,sqlist lb)

{

int j=0;

while(j<la.length &&j<lb.length )

{

if(la.a[j]>lb.a[j++])

return 1;

else if(la.a[j]<lb.a[j])

return -1;

else

j++;

}

if(la.length >lb.length)

return 1;

else if(la.length < lb.length)

return -1;

else

return 0;

}

void travel(sqlist l)

{

for(int i=0;i<l.length ;i++)

{

cout<<*(l.a+i)<<endl;

//cout<<l.a[i]<<endl;

}

}

int main()

{

sqlist la,lb;int m,n;

InitList(la);InitList(lb); char s;

cin>>m;

for(int i=0;i<m;i++)

{

cin>>s;

listinsert(la,i,s);

}

cin>>n;

for(i=0;i<n;i++)

{

cin>>s;

listinsert(lb,i,s);

}

cout<<compare(la,lb);

// travel(la);

return 0;

}



--------------------------------------------------------------



用尽可能少的辅助空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表

(a1,a2...am,b1,b2...bn)改变为(b1,b2,..bn,a1,a2...am)

注:此题m+n=sqlist l.length





#include<iostream>

using namespace std;

const list_size=10;

const listincreament=10;

typedef char datatype;

typedef struct

{

datatype* a; // 为了可以扩张存储单元,设置成这个指针变量,指向地址的。

int length;

int listsize;

int incrementsize;

}sqlist;

void InitList(sqlist &l,int maxsize=list_size,int increasize=listincreament)

{

l.a=new datatype[maxsize];

l.length =0;

l.listsize=maxsize;

l.incrementsize =increasize;

}

void listinsert(sqlist & l,int i,char e)

{

//if(l.length>=l.listsize)

// increment(l);



for(int j=l.length-1;j>=i;j--)

{

l.a[j+1]=l.a[j] ; // *(l.a+j+1)=*(l.a+j);

}

*(l.a+i)=e;

l.length ++;

}

void travel(sqlist l)

{

for(int i=0;i<l.length ;i++)

{

cout<<*(l.a+i)<<endl;

//cout<<l.a[i]<<endl;

}

}

void invert(datatype * a,int s,int t)

{

data(k=s;k<=(s+t)/2;k++)

{

datatype w;

w=a[k];

a[k]=a[s+t-k];..

a[s+t-k]=w;

}

}

void exchange(sqlist &l,int m,int n)

{

invert(l.a,0,l.length-1 );

invert(l.a,0,n-1);

invert(l.a,n,l.length -1);

}

int main()

{

sqlist la;int m,a,b;datatype s;

InitList(la);

cin>>m;

for(int i=0;i<m;i++)

{

cin>>s;

listinsert(la,i,s);

}

cin>>a>>b;

exchange(la,a,b);

travel(la);

return 0;

}

--------------------------------------------------------



已知一个非纯集合 a(a中可能有相同元素)试 构造一个纯集合b (使b中只包含a中所有值不同的成员)

#include<iostream>

using namespace std;

const list_size=10;

const listincreament=10;

typedef char datatype;

typedef struct

{

datatype* a; // 为了可以扩张存储单元,设置成这个指针变量,指向地址的。

int length;

int listsize;

int incrementsize;

}sqlist;

void InitList(sqlist &l,int maxsize=list_size,int increasize=listincreament)

{

l.a=new datatype[maxsize];

l.length =0;

l.listsize=maxsize;

l.incrementsize =increasize;

}

void listinsert(sqlist & l,int i,char e)

{

//if(l.length>=l.listsize)

// increment(l);



for(int j=l.length-1;j>=i;j--)

{

l.a[j+1]=l.a[j] ; // *(l.a+j+1)=*(l.a+j);

}

*(l.a+i)=e;

l.length ++;

}

void travel(sqlist l)

{

for(int i=0;i<l.length ;i++)

{

cout<<*(l.a+i)<<endl;

//cout<<l.a[i]<<endl;

}

}

void purge_sq(sqlist la,sqlist& lb)

{

lb.a[0]=la.a[0];

lb.length =1;

for(int i=1;i<la.length;i++)

{int j=0;

while(la.a[i]!=lb.a[j]&&j<lb.length)j++;

if(j==lb.length)

listinsert(lb,lb.length,la.a[i]);

}

// delete[] la;

}

int main()

{

sqlist la,lb;int m;datatype s;

InitList(la); InitList(lb);

cin>>m;

for(int i=0;i<m;i++)

{

cin>>s;

listinsert(la,i,s);

}

purge_sq(la,lb);

travel(lb);

return 0;

}

--------------------------------------



已知一个非纯集合 a(a中可能有相同元素)试 构造一个纯集合b (使b中只包含a中所有值不同的成员)

注: 用有序表 实现。 效率高于上一个。通常情况下 ,不用整个 顺序表 扫描了



#include<iostream>

using namespace std;

const list_size=10;

const listincreament=10;

typedef char datatype;

typedef struct

{

datatype* a; // 为了可以扩张存储单元,设置成这个指针变量,指向地址的。

int length;

int listsize;

int incrementsize;

}sqlist;

void InitList(sqlist &l,int maxsize=list_size,int increasize=listincreament)

{

l.a=new datatype[maxsize];

l.length =0;

l.listsize=maxsize;

l.incrementsize =increasize;

}



void increament(sqlist&l )

{

datatype *a;

a=new datatype[l.listsize+l.incrementsize];

for(int i=0;i<l.listsize;i++)

{

a[i]=l.a[i];

}

l.a=a;

delete []l.a;

l.listsize+=l.incrementsize;

}



void listinsert(sqlist & l,int i,char e)

{



for(int j=l.length-1;j>=i;j--)

{

l.a[j+1]=l.a[j] ;

}

*(l.a+i)=e;

l.length ++;

}

void purge_osq(sqlist &l)

{

int i=-1;int j=0;

while(j<l.length)

{

if(i<0 || l.a[i]!=l.a[j] )

l.a[++i]=l.a[j];

j++;

}

l.length =i+1;

}

void travel(sqlist l)

{

for(int i=0;i<l.length ;i++)

{

cout<<*(l.a+i)<<endl;

//cout<<l.a[i]<<endl;

}

}

int main()

{

sqlist la;int m,n;

InitList(la); char s;

cin>>m;

for(int i=0;i<m;i++)

{

cin>>s;

listinsert(la,i,s);

}

purge_osq(la);

travel(la);

return 0;

}

---------------------------------------

分别以两个(带头结点的)循环有序链表表示集合a 和集合b,完成求这两个集合的并集

注: 稍加修改 就是一元多项式 求和



#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 ListLength_CL(linklist l)

{

int i=0;

linklist p=l->next;

while(p!=l)

{

i++;

p=p->next;

}

return i;

}

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;

}

void union_ol(linklist&la,linklist & lb)

{int j=0;

linklist pa=la->next; linklist pb=lb->next;

while(pa!=la&&pb!=lb)

{

if(pa->data<pb->data)

{pa=pa->next; j++;}

else if(pa->data>pb->data)

{

Insert(&la,j,pb->data);

j++;

pb=pb->next;

}

else

{ j++;

pa=pa->next;

pb=pb->next;

}

}

if(pa==la)

{

int length=ListLength_CL(la);

while(pb!=lb)

{

Insert(&la,length,pb->data);

j++;

length++;

pb=pb->next;

}

}

}

void travellinknode(linklist &l)

{

linklist p=l->next;

while(p!=l)

{

cout<<p->data<<" ";

cout<<endl;

p=p->next;

}

}

int main()

{

linklist la,lb; datatype s;

Init(la); Init(lb); int m,n;

cin>>m;

for(int i=0;i<m;i++)

{

cin>>s;

Insert(&la,i,s);

}



cin>>n;

for(i=0;i<n;i++)

{

cin>>s;

Insert(&lb,i,s);

}

union_ol(la,lb);

cout<<"==============="<<endl;

travellinknode (la);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐