6-1 顺序表的实现
2021/12/8 23:20:34
本文主要是介绍6-1 顺序表的实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本题要求实现六个函数,顺序表为整型数据,可实现输入、输出、取值、查找、插入、删除功能。输入样例与输出样例对应情况见下图。函数接口定义:
顺序表描述的结构体为 typedef struct { ElemType *elem; //存储空间的基地址 int length; //当前长度 } SqList; 需要实现函数的接口分别为: int GetElem(SqList L, int i, ElemType &e) 顺序表的取值 判断i值是否合理,若不合理,返回0;[i-1]单元存储第i个数据元素; 返回1 int LocateElem_Sq(SqList L, double e) 顺序表的查找 查找成功,返回序号i+1;查找失败,返回0 int ListInsert_Sq(SqList &L, int i, ElemType e)顺序表的插入 判断i值,不合法返回0;当前存储空间已满,返回0;插入位置及之后的元素后移;将新元素e放入第i个位置;表长增1;返回1 int ListDelete_Sq(SqList &L, int i)顺序表的删除 判断i值,不合法返回0;被删除元素之后的元素前移;表长减1;返回1 void ListInput(SqList &L)顺序表数据的输入 输入顺序表长度;依次输入数据;表长赋值 void ListOutput(SqList L)顺序表数据的输出
裁判测试程序样例:
#include<iostream> #include<string> #include<iomanip> #include <cstdlib> using namespace std; #define OVERFLOW -2 typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型 #define MAXSIZE 100 //顺序表可能达到的最大长度 typedef struct { ElemType *elem; //存储空间的基地址 int length; //当前长度 } SqList; void InitList_Sq(SqList &L) { //算法2.1 顺序表的初始化 //构造一个空的顺序表L L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间 if (!L.elem) exit(OVERFLOW); //存储分配失败退出 L.length = 0; //空表长度为0 } /* 请在这里填写答案 */ int main() { SqList L; int i = 0, temp, a, c; double price; ElemType e; //初始化线性表 InitList_Sq(L); //输入线性表 ListInput(L); //输出线性表 ListOutput(L); //顺序表取值 cin>>i; temp = GetElem(L, i, e); if (temp != 0) { cout <<"查找位置的数是"<<e<< endl; } else cout << "查找失败!位置超出范围\n"; //顺序表查找 cin >> price; temp = LocateElem_Sq(L, price); if (temp != 0) { cout << "该数位置为" << temp << endl; } else cout << "查找失败!\n"; //顺序表的插入 cin >> a; cin >> e; //输入a和e,a代表插入的位置,e代表插入的数值 if (ListInsert_Sq(L, a, e)) ListOutput(L); else cout << "插入失败\n"; //顺序表的删除 cin >> c; if (ListDelete_Sq(L, c)) ListOutput(L); else cout << "删除失败\n"; return 0; }
输入样例:
在这里给出一组输入。例如:
5 5 4 3 2 1 2 2 2 6 6结尾无空行
输出样例:
在这里给出相应的输出。例如:
5 4 3 2 1 查找位置的数是4 该数位置为4 5 6 4 3 2 1 5 6 4 3 2结尾无空行 代码:
int GetElem(SqList L, int i, ElemType &e) // 顺序表的取值
{
if(i<1||i>L.length)//i值不合理的情况
return 0;//不合理返回0
e=L.elem[i-1];//elem第[i-1]单元存储第i个元素
return 1;
}
int LocateElem_Sq(SqList L, double e) //顺序表的查找
{
int i;
for(i=0;i<L.length;i++)//for循环对于顺序表进行遍历
if(L.elem[i]==e) return i+1;//序号i+1
return 0;
}
int ListInsert_Sq(SqList &L, int i, ElemType e)//顺序表的插入
{
int j;
if(i<1||i>L.length)//i值不合法
{return 0;}
if(L.length==MAXSIZE)//存储空间已满
{ return 0;}
for(j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];//将插入位置及之后的元素后移
}
L.elem[i-1]=e;
++L.length;
return 1;
}
int ListDelete_Sq(SqList &L, int i)//顺序表的删除
//判断i值,不合法返回0;被删除元素之后的元素前移;表长减1;返回1
{
int j;
if(i<1||i>L.length)//i值不合法
return 0;
for(j=i;j<L.length;j++){
L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
}
--L.length;
return 1;
}
void ListInput(SqList &L)//顺序表数据的输入
//输入顺序表长度;依次输入数据;表长赋值
{
int n;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d", &L.elem[i]);
L.length++;
}
}
void ListOutput(SqList L)//顺序表数据的输出
{
int i;
for (i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout<<endl;
}
这篇关于6-1 顺序表的实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南