顺序表的实现-包含插入-删除-查找等操作-完整源代码-有注释-包你喜欢
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一顺序表的实现
实验目的:熟练掌握顺序表的基本操作(插入、删除、查找等)
实验内容:顺序表中的基本操作的实现(初始化、插入、删除、求表长、按值查找、按位置查找)
实验要求:以顺序表的动态分配存储结构来实现;所有基本操作均应该以函数的形式表示;要有运行结果并考虑到顺序表中所有情况。
一、实验算法描述:
1、顺序表的声明和创建
typedef struct
{
int* data;//int*型元素
int length;//顺序表的实际长度
int listsize;//顺序表的最大长度
}sqlist;
void creatsqlist(sqlist &list)
{
list.data=(int*)malloc(sizeof(int)*maxsize);//开辟一个名为l的顺序表
if(!list.data)//判断顺序表是否存在
exit(1);
list.length=0;
list.listsize=maxsize;
}
2、初始化函数initsqlist(list)
void initsqlist(sqlist &list)//初始化操作
{
int* p;
int n;
cout<<"请输入顺序表元素数(1-50):"< cin>>n; cout<<"您申请的顺序表的长度是---"< p=list.data;//p指向头指针 cout<<"请依次输入无重复数字的有序顺序表(相邻数据用空格隔开,回车键完成输入):"< for(int i=0;i { cin>>*p; p++; list.length++; } cout<<"您输入的递增顺序表为:"< for(i=0;i cout< cout< } 3、输出函数put(list) void put(sqlist &list) //输出函数 { int i; for(i=0;i cout< cout< } 4、定位函数locateElem(list) void locateElem(sqlist &list) { int i,j=0,b; cout<<"请输如要查找的字符:\n"; cin>>b; for(i=0;i if(list.data[i]==b) {j=i+1;break;} if(j) cout<<"该数字的位置是:"< else cout<<"很抱歉,表中没有这个数字,请重试!"< 5、插入函数insert(list) void insert(sqlist &list)//插入函数 { int i; cout<<"您想在第几位插入数字:\n"; cin>>i; int x; cout<<"请输入要插入的数字:\n"; cin>>x; int j; if(i<0||i>list.length) { cout<<"位置错误"< put(list); } else { for(j=list.length;j>=i;j--) list.data[j]=list.data[j-1]; list.data[j]=x; list.length++; } cout<<"插入操作完成后的顺序表:"< put(list); } 6、删除函数delete1(list)和delete2(list) void delete1(sqlist &list)//删除第i个位置的数字的函数{ int i,b; cout<<"请输入你想要删除数据的位置:"< cin>>i; if(i<0||i>list.length) {cout<<"输入错误!"< else {b=list.data[i-1]; for(i=i-1;i list.data[i]=list.data[i+1]; --list.length; cout<<"需要删除的元素是:"< cout<<"删除操作完成后的顺序表是:"< put(list); } } void delete2(sqlist &list)//删除指定数字的函数 { int b; cout<<"输入您想删除的数字:"< cin>>b; int i,j=0; for(i=0;i { if(list.data[i]==b) {j=i+1;break;} } if(j!=0) { for(;i list.data[i]=list.data[i+1]; --list.length;