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