/*线性表的查找 2.6*/
#include <iostream>
using namespace std;
#define SIZE 6
int main()
{
int a[SIZE]={9,2,8,4,5,6};
int elem,i,j=0;
cin>>elem;
for(i=0;i<SIZE;++i)
{
if (elem==a[i])
{
cout<<i+1;
break;
}
}
while(1)
{}
return 0;
}
/*归并排序2 2.7*/
#include <iostream>
#define INIT_SIZE 100 //线性表的初始容量
using namespace std;
struct SqList
{
int *elem; //元素
int length; //长度
int listsize; //内存大小
};
int main()
{
struct SqList C ={
C.elem=new int [INIT_SIZE], //动态分配内存
C.length=0, //初始长度
C.listsize=INIT_SIZE //初始容量
};
struct SqList A ={
A.elem=new int [INIT_SIZE], //动态分配内存
A.length=0, //初始长度
A.listsize=INIT_SIZE //初始容量
};
struct SqList B ={
B.elem=new int [INIT_SIZE], //动态分配内存
B.length=0, //初始长度
B.listsize=INIT_SIZE //初始容量
};
int i=0,j=0,AElem,BElem;
int*pA,*pB,*pC; //指向A,B,C里元素的指针
char ch; //接受回车键的字符
cout<<“请输入线性表A: “;
while(1)
{
pA=&A.elem[A.length]; //指向线性表A中最开始的地址
cin>>AElem; //输入元素
*pA=AElem; //将输入的元素赋值给指针
++A.length; //地址加一
cout<<*pA<<” “; //输出线性表A中的元素
ch=getchar(); //接收回车
if(ch==’\n’)
break;
}
cout<<endl<<“请输入线性表B: “;
while(1) //同线性表A的操作
{
pB=&B.elem[B.length];
cin>>BElem;
*pB=BElem;
++B.length;
cout<<*pB<<” “;
ch=getchar();
if(ch==’\n’)
break;
}
while (i<A.length&&j<B.length) //当其中一个线性表的元素先取完时退出合并循环
{
pA=&A.elem[i];
pB=&B.elem[j];
pC=&C.elem[C.length];
if(*pA<=*pB) //把小的元素先赋给线性表C
{
*pC=*pA;
++i;
}
else
{
*pC=*pB;
++j;
}
++C.length;
}
if(i==A.length) //若A先取完 则把B的剩余元素添加给C
{
for(;j<B.length;++j)
{
pB=&B.elem[j];
pC=&C.elem[C.length];
*pC=*pB;
++C.length;
}
}
else //否则把A的剩余元素添加给C
{
for(;i<A.length;++i)
{
pA=&A.elem[i];
pC=&C.elem[C.length];
*pC=*pA;
++C.length;
}
}
cout<<endl<<“线性表C:”;
for(i=0;i<C.length;++i)
cout<<C.elem[i]<<” “; //输出C的所有元素
while (1) //让程序不退出 能观看结果
{}
delete [] A.elem;
delete [] B.elem;
delete [] C.elem;
return 0;
}