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)顺序表数据的输出
下面是代码,使用的语言为C++:
#inclued<iostream>
#include<string>
#include<iomanip>//用到i/o控制流的时候使用
#include<cstdlib>//作用相当于C里面的stdlib,是一个函数库
using namespace std;
#define OVERFLOW-2
typedef int ElemType;//将Elem定义为int类型
#define MAXSIZE 100 //规定顺序表所能达到的最大长度,什么时候用这个一目了然
typedef struct //构造一个结构体
{ElemType *elem; //这是存储空间的基地址
int length;
}SqList; //说明顺序表的结构类型为SQList
void InitList(SqList &L) //顺序表的初始化就是建一个空的顺序表
{L.elem=new ElemType[MAXSIZE]; //为顺序表分配一个数组空间
if(!L.elem) exit(OVERFLOW);
L.length=0;}
void ListInput(SqList &L) //顺序表的输入
{int i=0;
int n=0;
cin>>n
for(i=0;i<n;i++){
scanf("%d",L.elem[i];
L.length++;}}
void ListOutput(SqList L) //顺序表的输出
{int i=0;
for(i=0;i<L.length;I++)
{cout<<L.elem[i]<<" "}
cout<<endl;}
int GetElem(SqList L,int i,ElemType &e) //顺序表的取值
{if(i<1||i>L.length)
return 0;
e=L.elem[i-1];
return 1;}
int LocateElem(SqList L,double e) //顺序表的查找
{for(int i=0;i<L.length;i++)
if(L.elem==e) return i+1; //查找成功就返回序号i+1;
return 0;}
int ListInsert(SqList &L,int i,ElemType e) //顺序表插入
{if(i<0||i>L.length) return 0;
if(L.length==MAXSIZE) return 0;
for(int 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(SqList &L, int i) //顺序表的删除
{if(i<1||i>L.length)
return 0;
for(int j=i;j<=L.length-1;j++)
{L.elem[j-1]=L.elem[j];}
--L.length;
return 1;}
int main(){
SqList L;
int i=0,a,c,temp;
double price;
ElemType e;
InitList_Sq(L);
ListInout(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; }
}
标签:尝试,顺序,return,实现,elem,int,length,SqList 来源: https://www.cnblogs.com/zhanshuang/p/16688823.html