顺序表和单链表实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
一、顺序表操作验证
1. 实验目的
⑴掌握线性表的顺序存储结构;
⑵验证顺序表及其基本操作的实现;
⑶掌握数据结构及算法的程序实现的基本方法。
2. 实验内容
⑴建立含有若干个元素的顺序表;
⑵对已建立的顺序表实现插入、删除、查找等基本操作。
3.设计与编码
#include
#include
#include
struct LinearList
{
int *list;
int size;
int MaxSize;
};
typedef struct LinearList LIST;
void InitList(LIST *L,int ms)
{
if((L->list=(int*)malloc(ms *sizeof(int)))==NULL){ printf("内存申请错误!\n");
exit(1);
}
L->size=0;
L->MaxSize=ms;
}
int InsertList(LIST *L,int item,int rc) {
int i;
if(L->size>=L->MaxSize)
return-1;
if(rc<0)
rc=0;
if(rc>L->size)
rc=L->size;
for(i=L->size-1;i>=rc;i--)
L->list[i+1]=L->list[i];
L->list[rc]=item;
L->size++;
return 0;
}
void OutputList(LIST *L)
{
int i;
for(i=0;i
printf("%d ",L->list[i]);
printf("\n");
}
int FindList(LIST *L,int item)
{
int i;
for(i=0;i
if(item==L->list[i])
return i;
return -1;
int DeleteList1(LIST *L,int item)
{
int i,n;
for(i=0;i
if(item==L->list[i])
break;
if(i
for(n=i;n
L->list[n]=L->list[n+1];
L->size--;
return i;
}
return -1;
}
int DeleteList2(LIST *L,int rc)
{
int i,n;
if(rc<0||rc>=L->size)
return -1;
for(n=rc;n
L->list[n]=L->list[n+1];
L->size--;
return 0;
}
{
LIST LL;
int i,r;
printf("list addr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize); InitList(&LL,100);
printf("list addr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize);
while(1)
{
printf("请输入元素值,输入0结束插入操作:");
fflush(stdin);
scanf("%d",&i);
if(i==0)
break;
printf("请输入插入位置:");
scanf("%d",&r);
InsertList(&LL,i,r-1);
printf("线性表为:");
OutputList(&LL);
}
while(1)
{
printf("请输入查找元素值,输入0结束查找操作:");
fflush(stdin);
scanf("%d",&i);
if(i==0)
break;
r=FindList(&LL,i);
if(r<0)
printf("有符合条件的元素,位置为:%d\n",r+1);
}
while(1)
{
printf("请输入删除元素值,输入0结束查找操作:");
fflush(stdin);
scanf("%d",&i);
if(i==0)
break;
r=DeleteList1(&LL,i);
if(r<0)
printf("没找到\n");
else{
printf("有符合条件的元素,位置为:%d\n线性表为:",r+1);
OutputList(&LL);
}
}
while(1)
{
printf("请输入删除元素位置,输入0结束查找操作:");
fflush(stdin);
scanf("%d",&r);
if(r==0)
break;
i=DeleteList2(&LL,r-1);
if(i<0)
printf("位置越界\n");
else{