- 22
- 0
- 约1.11万字
- 约 19页
- 2016-10-22 发布于湖北
- 举报
算法设计基础实验
班级:
学号:
姓名:
实验一 线性表的应用
实验内容:
1.给定一线性表L=(15,25,05,36,78,85,23),写出顺序存储结构下的插入、删除、排序操作的算法及程序。
2.写出链接存储结构下的插入、删除、排序操作的算法及程序。
实验要求:
1.掌握顺序及链接存储下的插入、删除算法;
2.掌握直接插入排序算法;
实验程序
#includeiostream.h
#includestdlib.h
struct List
{
int *list;
int size;
int MaxSize;
};
void InitList(List L)
{
L.MaxSize=10;
L.list=new int[L.MaxSize];
if(L.list==NULL)
{
cout动态可分配的存储空间用完,退出运行!endl;
exit(1);
}
L.size=0;
}
bool InsertList(List L,int item,int pos)
{
if(pos-1||posL.size+1)
{
coutpos值无效!endl;
return false;
}
int i;
if(pos==0)
{
for(i=0;iL.size;i++)
if(itemL.list[i]) break;
pos=i+1;
}
else if(pos==-1)
pos=L.size+1;
if(L.size==L.MaxSize)
{
int k=sizeof(int);
L.list=(int*)realloc(L.list,2*L.MaxSize*k);
if(L.list==NULL)
{
cout动态可分配的空间用完,退出运行!endl;
exit(1);
}
L.MaxSize=2*L.MaxSize;
}
for(i=L.size-1;i=pos-1;i--)
L.list[i+1]=L.list[i];
L.list[pos-1]=item;
L.size++;
return true;
}
bool DeleteList(List L,int item,int pos)
{
if(L.size==0)
{
cout线性表为空,删除无效!endl;
return false;
}
if(pos-1||posL.size)
{
coutpos值无效!endl;
return false;
}
int i;
if(pos==0)
{
for(i=0;iL.size;i++)
if(item==L.list[i])
break;
if(i==L.size)
return false;
pos=i+1;
}
else if(pos==-1)
pos=L.size;
item=L.list[pos-1];
for(i=pos;iL.size;i++)
L.list[i-1]=L.list[i];
L.size--;
if(float(L.size)/L.MaxSize0.4L.MaxSize10)
{
int k=sizeof(int);
L.list=(int*)realloc(L.list,L.MaxSize*k/2);
L.MaxSize=L.MaxSize/2;
}
return true;
}
void SortList(List L)
{
int i,j;
int x;
for(i=1;iL.size;i++)
{
x=L.list[i];
for(j=i-1;j=0;j--)
if(xL.list[j])
L.list[j+1]=L.list[j];
else break;
L.list[j+1]=x;
}
}
void TraverseList(List L)
{
for(int i=0;iL.size;i++)
coutL.list[i] ;
coutendl;
}
void main()
{
int a[7]={15,25,5,36,78,85,23};
int i;
int x;
List t;
原创力文档

文档评论(0)