🎃Hello,大家好,今天我们要做的是线性表的顺序表示和实现。
目录
3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。
5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。
6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。
7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。
8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。
🎯目的:
1、熟悉VC环境的使用以及程序的输入,编辑,调试,运行的全过程。
2、掌握线性表的顺序结构的静态及操作特点。
3、掌握线性表的顺序结构的静态存储和常见操作在C语言环境中的实现方法。
🎯内容:
1、实现顺序表的定义并创建顺序表。
2、实现线性表顺序存储结构下元素的插入操作。
3、实现线性表顺序存储结构下元素的删除操作。
4、实现线性表顺序存储结构下取元素操作。
🎯环境:
TC或VC++。
🎯步骤:
🎐1、顺序表的存储定义。
typedef struct { //定义顺序表
ElemType *elem;
int length;
} SqList;
🎐2、顺序表的初始化,构造一个空的顺序表。
Status InitList(SqList &L) //创建顺序表
{}
🎐3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。
void InputList(SqList &L, int n)
//输入顺序表的内容(此函数也可以为void InputList(SqList &L),可根据实际情况编写)
{}
🎐4、输出顺序表中的各元素值。
void OutputList(SqList L) //输出顺序表中各元素的值
{}
🎐5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。
Status ListInsert(SqList &L, int i, ElemType e)
{}
🎐6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。
Status ListDelete(SqList &L, int i)
{}
🎐7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。
Status GetElem(SqList L, int i, ElemType &e)
{}
🎐8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。
int LocateElem(SqList L, ElemType e)
{}
🎯 完整代码:
#include "iostream"
using namespace std;
#define ERROR 0
#define OVERFLOW -1
#define MAX 50
#define OK 1
typedef int Status;
typedef struct{//定义顺序表
int *elem;
int length;
}SqList;
Status InitList(SqList &L){//创建顺序表
L.elem=new int[MAX];//为顺序表分配大小为MAX的数组空间
if(!L.elem)
return OVERFLOW;//验证分别配空间是否成功
L.length=0;//表长设置为0
return OK;
}
void InputList(SqList &L,int n){//输入表中的内容
for(int i=0;i<n;i++){
cin>>L.elem[i];
L.length++;
}
}
void OutputList(SqList L){//输出表中的值
cout<<"表中的值为:";
for(int i=0;i<L.length;i++){
printf("%-3d ",L.elem[i]);
}
cout<<'\n';
}
Status ListInsert(SqList &L,int i,int e){//元素插入
//可插入的位置1<=i<=L.length+1
if(i<1||i>L.length+1)
return ERROR;//表示i的值不合法
if(L.length==MAX)
return ERROR;//表示空间已满
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];//从最后一个元素往后移
L.elem[i-1]=e;
L.length++; //长度加1
return OK;
}
Status ListDelete(SqList &L,int i){//元素的删除
//可删除的位置1<=i>=L.length
if(i<1||i>L.length)
return ERROR;
for(int j=i-1;j<L.length;j++)
L.elem[j]=L.elem[j+1];//从第i+1个元素往前移
L.length--; //长度减一
return OK;
}
Status GetElem(SqList L,int i,int &e){//取出表中的值
//可取的位置1<=i<=L.length
if(i<1||i>L.length)
return ERROR;//表示i的值不合法
e=L.elem[i-1];//将第i个值付赋给了e
return OK;
}
int LocateElem(SqList L, int e){//查找值的位置
for(int i=0;i<L.length;i++){
if(L.elem[i]==e)
return i+1;
}
return 0; //查找失败
}
int main(){
SqList L;
int n,choose,t,i,e;
printf("1.创建顺序表\n");
printf("2.输入\n");
printf("3.输出\n");
printf("4.插入\n");
printf("5.删除\n");
printf("6.取值\n");
printf("7.查找\n");
printf("0.退出\n");
cout<<"请输入您的选择:";
cin>>choose;
while(1){//一直循环,直到用break打破为止
if(choose==0){
cout<<"您已退出!\n";
break;
}
switch(choose){//判断用户的选择
case 1:
if(InitList(L)==1)
cout<<"顺序表创建成功!\n";
else
cout<<"顺序表创建失败!\n";
break;
case 2:
cout<<"请您输入要输入元素的个数:";
cin>>n;
InputList(L,n);
break;
case 3:
OutputList(L);
break;
case 4:
cout<<"请输入您要插入的位置:";
cin>>i;
cout<<"请输入您要在此处插入的值:";
cin>>e;
t=ListInsert(L,i,e);
if(t!=1)
cout<<"插入位置不合法!!!\n";
else
OutputList(L);
break;
case 5:
cout<<"请输入您要删除的位置:";
cin>>i;
t=ListDelete(L,i);
if(t!=1)
cout<<"删除位置不合法!!!\n";
else
OutputList(L);
break;
case 6:
cout<<"请输入您要取的值的位置:";
cin>>i;
t=GetElem(L,i,e);
if(t!=1)
cout<<"取值位置不合法\n";
else
cout<<"第"<<i<<"个元素是"<<e<<endl;
break;
case 7:
cout<<"请输入您要查找的值:";
cin>>e;
t=LocateElem(L,e);
if(t==0)
cout<<"您查找的值不在表中\n";
else
cout<<"元素"<<t<<"的位置在第"<<t<<"个"<<endl;
break;
default:
cout<<"您的输入有误"<<endl;
}
cout<<"请输入您的选择:";
cin>>choose;
}
return 0;
}
🎃以上是本期的所有内容了,请大佬多多在评论区指正!
🌞我是IT闫,期待你的关注!!!❤️