數據結構 p25-26 算法實現 線性表的查找與歸併排序2

/*線性表的查找 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;
}


發佈了34 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章