线性表的基本操作实现及其应用
一、实验目的
1、 熟练掌握线性表的结构特点,掌握顺序表的基本操作。
2、 巩固C++相关的程序设计方法与技术。
3、 学会使用顺序表解决实际问题。
二、实验内容
1、顺序表的建立与操作实现
建立n个元素的顺序表(n的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
数据类型均为整型。
2、相关操作的算法表达;
1、 顺序表的建立
void CreateList(SeqList *L,int n)
{ int i;
printf("please input n numbers:\n");
for(i=1;i<=n;i++)
scanf("%d",&L->elem[i]);
L->length=n;
}
2、 顺序表的打印
void PrintList(SeqList *L,int n)
{int i;
printf("the sqlist is\n");
for(i=1;i<=n;i++)
printf("%d ",L->elem[i]);
printf("\n");
}
3、 顺序表的查找
int LocateList(SeqList *L,int x)
{int i;
i=1;
while (((L->elem[i])!=x)&&(i<=10))
++i;
if ((L->elem[i])==x) return(i);
else return(0);
}
4、 顺序表的插入
void InsertList(SeqList *L,int x,int i)
{int j;
if (i<1 ||i>L->length+1)
printf("no insert position!\n");
else
{for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];
L->elem[i]=x;
L->length++;
}
}
5、 顺序表的删除
void DeleteList(SeqList *L,int i)
{int j;
if (i<1 ||i>L->length)
printf("no delete position!\n");
else
{for(j=i;j<=(L->length)-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
}
}
3、完整程序;
#include <stdio.h>
#include <stdlib.h>
#define ListSize 100
typedef struct
{int elem[ListSize];
int length;
}SeqList;
void CreateList(SeqList *L,int n)
{int i;
printf("please input nnumbers:\n");
for(i=1;i<=n;i++)
scanf("%d",&L->elem[i]);
L->length=n;
}
void PrintList(SeqList *L,int n)
{int i;
printf("the sqlistis\n");
for(i=1;i<=n;i++)
printf("%d",L->elem[i]);
printf("\n");
}
int LocateList(SeqList *L,int x)
{int i;
i=1;
while (((L->elem[i])!=x)&&(i<=10))
++i;
if ((L->elem[i])==x) return(i);
else return(0);
}
void InsertList(SeqList *L,int x,int i)
{int j;
if (i<1 ||i>L->length+1)
printf("no insertposition!\n");
else
{for(j=L->length;j>=i;j--)
L->elem[j+1]=L->elem[j];
L->elem[i]=x;
L->length++;
}
}
void DeleteList(SeqList *L,int i)
{int j;
if (i<1 ||i>L->length)
printf("no deleteposition!\n");
else
{for(j=i;j<=(L->length)-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
}
}
void main()
{
SeqList L;
int i,x;
int n=10;
L.length=0;
CreateList(&L,n);
PrintList(&L,L.length);
printf("input the researchelement:");
scanf("%d",&x);
i=LocateList(&L,x);
printf("the researchposition is %d\n",i);
printf("input the positionof insert:");
scanf("%d",&i);
printf("input the value ofinsert:");
scanf("%d",&x);
InsertList(&L,x,i);
PrintList(&L,L.length);
printf("input the positionof delete:");
scanf("%d",&i);
DeleteList(&L,i);
PrintList(&L,L.length);
}
4、总结、运行结果和分析。
5、总体收获和不足,疑问等。
通过这次写实验报告,我深切理解到了这门课的本质。刚开始学习这门课时,还不清楚这门课程的目的,现在,我懂得了:数据结构像是身体的骨骼。数据结构是个框架,模型,抽象数据类型中列举了各种操作,而所用的C++语言,将各种操作描述出来构成算法。
这次编写顺序表遇到的问题不少,最终通过查阅资料和与同学讨论完成了实验报告,相信在过后的课时中能不断提升自己能力。