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

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

2008-11-29 21:46 127 查看
离期末考试还有一个多月,打算系统复习一下数据结构。因为这段时间投入在数据结构上的时间基本没有。

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

这是源码:

#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<=m && i<=n && 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;

}

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

基础不牢,见笑了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: