您的位置:首页 > 理论基础 > 数据结构算法

数据结构 p25-26 算法实现 线性表的查找与归并排序2

2017-09-25 16:39 363 查看
/*线性表的查找 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;

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