题目:用顺序表求两集合的交集
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define error 0
#define ok 1
typedef int status;
#define listinitsize 100
#define listincrement 10
typedef char elemtype;
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist ;
status initlist(sqlist &l)//构造一个空的线性表L
{
l.elem=(elemtype *)malloc(listinitsize*sizeof(elemtype));
if(!l.elem) exit(error);//存储分配失败
l.length=0;
l.listsize=listinitsize;//初始存储容量
return ok;
}
//顺序表实验4个辅助函数:
status inputlist(sqlist &l)//顺序表输入
{ int i,n;
//printf("please input the length of the sqlist:");
scanf("%d",&n);
l.length=n;
//printf("please input the data of the sqlist:");
for (i=0;i<=l.length-1;i++) scanf("%d",&l.elem[i]);
return ok;
}
status listtraverse(sqlist l)//顺序表输出
{ int i;
printf("the length of the sqlist:");
printf("%d\n",l.length);
printf("the data of the sqlist:");
for (i=0;i<=l.length-1;i++) printf("%d ",l.elem[i]);
printf("\n");
return ok;
}
status destroylist(sqlist &l)//顺序表撤销
{ free(l.elem);
l.length=0;
l.listsize=0;
return ok;
}
status clearlist(sqlist &l)//顺序表重置
{
l.length=0;
return ok;
}
int locateelem(sqlist l,elemtype e)//判定
{ int a;
for(int i=0;i<l.length;i++)
{
if(l.elem[i]==e)
return i+1;
//else cout<<"error"<<endl;
}
return error;
}
/*
{
for(int i=1;i<listlength(la);i++)
{
getelem(la,i,e);
if(locateelem(lb,e)!=0)
insertlist(lc,listlength(lc)+1,e);
}
}
*/
status getelem(sqlist l,int i, elemtype &e)
{
if(i<1||i>l.length+1) return error;
else
e=l.elem[i-1];
return ok;
}
status listinsert(sqlist &l,int i,elemtype e)
{
elemtype *newbase,*q,*p;
if(i<1||i>l.length+1) return error;
if(l.length>=l.listsize)
{
newbase=(elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
if(!newbase) exit(error);
l.elem=newbase;
l.listsize+=listincrement;
}
q=&(l.elem[i-1]);
for(p=&(l.elem[l.length-1]);p>=q;--p) *(p+1) =*p;
*q=e;
++l.length;
return ok;
}
int main()
{
sqlist la,lb,lc;
initlist(la);
inputlist(la);
initlist(lb);
inputlist(lb);
initlist(lc);
elemtype e;
for(int i=1;i<la.length;i++)
{
getelem(la,i,e);
//if(locateelem(la,e)==0)
listinsert(lc,lc.length+1,e);
}
listtraverse(lc);
destroylist(la);
destroylist(lb);
destroylist(lc);
return 0;
}