线性表练习一

题目:从input.txt中读取数组A,B,C,采用线性表输出A∪(B - C)的集合

#include<iostream.h>
#include<fstream.h>
#include<malloc.h>
#include<process.h>

#define LIST_INIT_SIZE 10 //线性表空间初始分配量
#define LISTINCREMENT 2   //线性表空间的分配增量

typedef int ElemType;
typedef int Status;
struct Sqlist
{
	ElemType *elem;		   //表首地址
	int length;			   //表长度
	int listsize;          //当前分配的存储容量
};


/*求线性表的长度*/
int ListLength(Sqlist L)   
{
	return L.length;
}
/*返回线性表L的第i个数据元素的值,存储在e中*/
Status GetElem(Sqlist L,int i ,ElemType &e)
{
	if(i<1||i>L.length)
	{
		exit(0);
	}
	e=*(L.elem+i-1);
	return 1;
}
/*初始化线性表L*/
Status InitList(Sqlist &L)
{
	L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));   //分配存储空间
	if(!L.elem)
	{
		exit(0);

	}
	L.length=0;		//初始化长度
	L.listsize=LIST_INIT_SIZE;  //初始化存储容量


	return 1;

}
/*删除线性表L的第i个元素*/
Status ListDelete(Sqlist &L,int i)
{
	ElemType *p,*q;
	if(i<1||i>L.length)
	{
		return 0;
	}
	p=L.elem+i-1;
	q=L.elem+L.length-1;
	for(++p;p<=q;++p)
	{
		*(p-1)=*p;
	}
	L.length--;
	return 1;

}
/*在线性表的第i个位置插入e*/
Status ListInsert(Sqlist &L,int i,ElemType e)
{
	ElemType *newbase,*q,*p;
	if(i<1||i>L.length+1)
		return 0;

	if(L.length>=L.listsize)
	{
		if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
		{
			exit(0);
		}
		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 1;
	

}


/*计算A∪(B - C)函数*/
int  Calucate(Sqlist Array_a,Sqlist Array_b,Sqlist &Array_c)
{
	int Len_a,Len_b,Len_c;
	ElemType e1,e2;
	int m=1,n=1,k=0;
	Len_a=ListLength(Array_a);
	Len_b=ListLength(Array_b);
	Len_c=ListLength(Array_c);
	

     for(int i=0;i<Len_b;i++)   //(B-C)算法,存储在Array_b中
	{
		for(int j=0;j<Len_c;j++)
		{
			if(*(Array_b.elem+i)==*(Array_c.elem+j))
			{
				ListDelete(Array_b,i+1);  
			}
		}
	}
	Len_b=Array_b.length;     //Array_b的新长度


   InitList(Array_c);         //再次初始化Array_c,存储最后结果
 
  
   while((m<=Len_a)&&(n<=Len_b))  //A∪B算法
   {
	   GetElem(Array_a,m,e1);
	   GetElem(Array_b,n,e2);
	   if(e1<=e2)
	   {
		   ListInsert(Array_c,++k,e1);
		   ++m;
		   if(e1==e2) n++;   //两个相等的值比较的情况
	   }
	   else
	   {
		  
		   ListInsert(Array_c,++k,e2);
		   ++n;
	   }
   }
   while(m<=Len_a)     //剩余的数直接插入
   {
	   GetElem(Array_a,m++,e1);
	   ListInsert(Array_c,++k,e1);
   }
   while(n<=Len_b)
   {
	   GetElem(Array_b,n++,e2);
	   ListInsert(Array_c,++k,e2);
   }
 
   cout<<"the count of numbers:";
   cout<<Array_c.length<<endl;
   cout<<"the number:";
   for(int i1=0;i1<Array_c.length;i1++)
   {
	   cout<<*(Array_c.elem+i1);
	   cout<<"   ";
   }
   cout<<endl;

return 0;
}

int main()
{

	int a[256];
	Sqlist Array_a,Array_b,Array_c;

	ifstream infi("input.txt",ios::in);//读取当前目录下的input.txt
	for(int i=0;!infi.eof();i++)//存放于a[i]中
	{
		infi>>a[i];
	}
    infi.close();

    Status st;        
	st=InitList(Array_a);         //Array_a
	if(st==1)
	{
		for(int j=1;j<=a[0];j++)
		{
            st=ListInsert(Array_a,j,a[j+2]);
		}
	}

    st=InitList(Array_b);   //Array_b
	if(st==1)
	{
		for(int j=1;j<=a[1];j++)
		{
            st=ListInsert(Array_b,j,a[j+2+a[0]]);
		}
	}


    st=InitList(Array_c);   //Array_c
	if(st==1)
	{
		for(int j=1;j<=a[2];j++)
		{
            st=ListInsert(Array_c,j,a[j+2+a[0]+a[1]]);
		}
	}

	
	Calucate(Array_a,Array_b,Array_c);  //调用计算函数

   
     return 0;

}


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值