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

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

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

这是源码:

 

#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;
}

 

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

基础不牢,见笑了。

 

posted on 2008-11-29 21:46  俱正Steven  阅读(1009)  评论(0编辑  收藏  举报

导航