数据结构与算法:线性表(源码)!

离期末考试还有一个多月,打算系统复习一下数据结构。因为这段时间投入在数据结构上的时间基本没有。

所以掌握十分不牢固。现在贴段程序。希望园子里的朋友可以帮我解决一下指针的使用出的读写错误。

这是源码:

 

#include  < iostream >
#define  Max  100
using   namespace  std;
typedef 
int  datatype;
/* 线性表结构 */  
typedef 
struct  SeqList{
    datatype data[Max];
    
int  last;
} SeqList;
/* 初始化 */  
SeqList 
*  init_SeqList()
{
   SeqList 
* L;   int  i;
   L
= new  SeqList;
   cout
<< " 请输入顺序表的长度 " << endl;
   cin
>> L -> last;
   L
-> last -- ;
   cout
<< " 请输入顺序表的内容 " << endl;
   
for (i = 0 ;i <= L -> last;i ++ )
     cin
>> L -> data[i];
   
return  L;
}
/* 读取 */  
void  Print(SeqList  * L)
{
   
int  i;
   cout
<< " 顺序表内容为: " << endl;
   
for (i = 0 ;i <= L -> last;i ++ )
     cout
<< L -> data[i] << endl;
}
/* 从小到大排序 */  
void  Part(SeqList  * L)
{
     
int  i,j;
     datatype t;
     
for (j = 0 ;j <= L -> last;j ++
    { 
for  (i = 0 ;i < L -> last - j;i ++
    
if  (L -> data[i] > L -> data[i + 1 ]) 
    { t
= L -> data[i]; 
    L
-> data[i] = L -> data[i + 1 ];
    L
-> data[i + 1 ] = t;}
    } 
}
/* 插入 */
int  Insert(SeqList  * L, int  i,datatype x){
    
int  j;
    
if (L -> last > Max - 1 ){
                       cout
<< " 表满 " << endl;
                       
return   - 1 ;
                       }
    
if (i < 1 || i > L -> last + 2 ){
                         cout
<< " 插入位置错误!插入失败 " << endl;
                         
return   0
                         }
    
for (j = L -> last;j >= i - 1 ;j -- )
                             L
-> data[j + 1 ] = L -> data[j];
                             L
-> data[i - 1 ] = x;
                             L
-> last ++ ;
                             
return   1 ;
    } 
/* 删除 */
int  Delete(SeqList  * L, int  i){
    
int  j;
    
if (i < 1 || i > L -> last + 1 ){
                         cout
<< " 不存在第i个元素 " << endl;
                         
return   0
                         }
    
for (j = i;j <= L -> last;j ++ )
    L
-> data[j - 1 ] = L -> data[j];
    L
-> last -- ;
    
return   0 ;
    }
/* 按值查找 */
int  Location(SeqList  * L,datatype x){
    
int  i;
    i
= 0 ;
    
while (i <= L -> last && L -> data[i] != x){
    i
++ ;
    
if (i > L -> last){
                  
return   - 1 ;
                  }
}
    
return  i + 1 ;
}
/* 线性表合并 */
void  Merge(SeqList  * A,SeqList  * B,SeqList  * C){
     
int  i,j,k;
     i
= 0 ;
     j
= 0 ;
     k
= 0 ;
     
while (i <= A -> last  &&  j <= B -> last)
     
if (A -> data[i] < B -> data[j])
     C
-> data[k ++ ] = A -> data[i ++ ];
     
else
     C
-> data[k ++ ] = B -> data[j ++ ];
     
while (i <= A -> last)
     C
-> data[k ++ ] = A -> data[i ++ ];
     
while (j <= B -> last)
     C
-> data[k ++ ] = B -> data[j ++ ];
     C
-> last = k;
     }
/* 两个线性表的比较 */
int  Compare( int  A[], int  B[], int  m, int  n){
    
int  i,j,AS[ 100 ],BS[ 100 ],ms,ns;
    i
= 0 ;
    ms
= ns = 0 ;
    
while (i <= &&  i <= &&  A[i] == B[i])
    i
++ ;
    
for (j = i;j < m;j ++ ){
                     AS[j
= i] = A[j];
                     ms
++ ;
                     }
    
for (j = i;j < n;j ++ ){
                     BS[j
- i] = B[j];
                     ns
++ ;
                     }
    
if (ms == ns && ms == 0 )
    
return   0 ;
    
else
    
if (ms == 0 && ns > 0 || ms > 0 && ns > 0 && AS[ 0 ] < BS[ 0 ])
    
return   - 1 ;
    
else
    
return   1 ;
    }
/* 线性表转化成数组 */
int  Change(SeqList  * L){
    
int  i;
    
int  a[L -> last];
    
for (i = 0 ;i < L -> last;i ++ )
    a[i]
= L -> data[i]; 
    
return  a[L -> last];
    } 
/* 主函数 */
int  main()
{
   
int  into;
   
int  del;
   
int  result;
   
int  a[ 100 ];
   
int  b[ 100 ]; 
   datatype find;
   datatype num;
   SeqList 
* L;
   SeqList 
* L2;
   SeqList 
* L3; 
   L
= init_SeqList();
   cout
<< " 您输入的 " ;
   Print(L);
   Part(L);
   cout
<< " 从小到大排序后的 "
   Print(L);
   cout
<< " 请输入您要插入的数: " << endl;
   cin
>> num;
   cout
<< " 请输入您要插入的位置: " << endl;
   cin
>> into;
   Insert(L,into,num);
   cout
<< " 插入后的 " ;
   Print(L);
   cout
<< " 请输入您要删除的元素位置: " << endl;
   cin
>> del;
   Delete(L,del);
   Print(L);
   cout
<< " 请输入您要查找的数 " << endl;
   cin
>> find;
   cout
<< " 您查找的数在第 " << Location(L,find) << " " << endl; 
   cout
<< " 输入第二个线性表: " << endl;
   L2
= init_SeqList();
   cout
<< " 您输入的 " ;
   Print(L2);
   Part(L); 
   Part(L2);
   Merge(L,L2,L3);
   cout
<< " 两个从小到大线性表合并后的 " ;
   Print(L3);
   cout
<< " 线性表转化成数组 " << endl;
   a[
100 ] = Change(L);
   b[
100 ] = Change(L2);
   
int   * x;
   
int   * y;
   x
=& a[ 100 ];
   y
=& b[ 100 ];
   cout
<< " 两个线性表的比较 " << endl;
   result
= Compare(x,y,L -> last,L2 -> last);
   
if (result = 1 ){
                cout
<< " A线性表大于B线性表 " << endl;
                }
else   if (result = 0 ){
                      cout
<< " A线性表等于B线性表 " << endl;
                      }
else   if (result =- 1 ){
                            cout
<< " A线性表小于B线性表 " << endl;
                            }
   
return   0 ;
}

 

编译可以通过,但是合并线性表这里有问题,而且两个线性表的比较也不成功,希望朋友可以帮忙看看。谢谢!

基础不牢,见笑了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值