#include<iostream> //相关顺序表的操作
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#define MAX 100
typedef struct {//定义一个符合顺序表的结构体
ElemType *elem;
int length;
}SqList;
Status InitList(SqList &L)//构造一个空顺序表为,名字为:L
{
L.elem = new ElemType[MAX];//分配MAX数组的空间,指针指向数组的首地址
if(!L.elem) return 0;//分配失败
L.length = 0;//空表内元素含有长度为0
return OK;
}
int LocateElem_Sq(SqList L,ElemType e)//进行按值查找,返回其位序,i+1
{
int i;
for(i=0;i<L.length-1;i++)
if(L.elem[i]==e) return i+1;
return 0;//如果没有找到,返回0
}
int GetElem_Sq(SqList L,ElemType i)//按位序查找,返回下标为i的值
{
if(i<1 || i>L.length) return ERROR;//先判断i的值是否合法
return L.elem[i];//合法返回下标为i的值
}
Status Intsert_Sq(SqList &L,int i,ElemType e)//在位置i插入一个数e,
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法
if(L.length == MAX) return OVERFLOW;//如果存储已经满了
for(j=L.length-1;j>=i-1;j--)
{
L.elem[j+1] = L.elem[j];//所以插入位置之后的元素后移一位
}
L.elem[i-1] = e;//在第i个位置赋值为e
++L.length;//长度增加1
return OK;
}
Status Delet_Sq(SqList &L,int i,ElemType e)//删除第i个元素
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1] = L.elem[j];//删除的元素之后全部前移动一位
}
e = L.elem[i];
--L.length;//长度减少1
return OK;
}
int main()
{
SqList L;
int i;//位序
int e;//返回的值
int locate;//查找出来的数
int number;//按位序查找的数
int inum;//要插入的数
int choose;//代表选择的操作
cout<<"1.建立顺序表\n";
cout<<"2.输入数据\n";
cout<<"3.进行值的查找\n";
cout<<"4.进行按序号查找\n";
cout<<"5.插入\n";
cout<<"6.删除\n";
cout<<"7.输出数据\n";
cout<<"0,退出\n";
// cout<<"\n";
choose = -1;
while(choose!=0)
{
cout<<"请输入你的选择\n";
cin>>choose;
switch(choose)
{
case 1:
if(InitList(L))
cout<<"新建成功!\n\n";
else
cout<<"新建失败!\n";
break;
case 2:
cout<<"请输入十个数\n\n";
for(i=0;i<10;i++)
cin>>L.elem[i];
L.length = 10;
cout<<endl;
break;
case 3:
cout<<"请输入要查询的数\n";
cin>>e;
locate = LocateElem_Sq(L,e);
if(locate!=0)
cout<<e<<"位序为"<<locate<<"\n";
else
cout<<"不存在这个数,查找失败!\n";
break;
case 4:
// int i;
cout<<"请输入要查找的位序\n";
cin>>i;
number = GetElem_Sq(L,i);
if(number == ERROR)
cout<<"查找失败,i不合法\n";
else
cout<<"位序为i的值是"<<number<<"\n";
break;
case 5:
cout<<"请输入要插入的位置和数\n";
cin>>i>>inum;
if(Intsert_Sq(L,i,inum))
cout<<"插入成功\n";
else
cout<<"插入失败!\n";
break;
case 6:
// int i;
cout<<"输入要删除的数的位序\n";
cin>>i;
if(Delet_Sq(L,i,e))
cout<<"删除成功"<<"删除的数为"<<e<<"\n";
else
cout<<"删除成功!\n";
break;
case 7:
//int i;
cout<<"现在顺序表的内容是:\n";
for(i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl<<endl;
break;
}
}
return 0;
}
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#define MAX 100
typedef struct {//定义一个符合顺序表的结构体
ElemType *elem;
int length;
}SqList;
Status InitList(SqList &L)//构造一个空顺序表为,名字为:L
{
L.elem = new ElemType[MAX];//分配MAX数组的空间,指针指向数组的首地址
if(!L.elem) return 0;//分配失败
L.length = 0;//空表内元素含有长度为0
return OK;
}
int LocateElem_Sq(SqList L,ElemType e)//进行按值查找,返回其位序,i+1
{
int i;
for(i=0;i<L.length-1;i++)
if(L.elem[i]==e) return i+1;
return 0;//如果没有找到,返回0
}
int GetElem_Sq(SqList L,ElemType i)//按位序查找,返回下标为i的值
{
if(i<1 || i>L.length) return ERROR;//先判断i的值是否合法
return L.elem[i];//合法返回下标为i的值
}
Status Intsert_Sq(SqList &L,int i,ElemType e)//在位置i插入一个数e,
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法
if(L.length == MAX) return OVERFLOW;//如果存储已经满了
for(j=L.length-1;j>=i-1;j--)
{
L.elem[j+1] = L.elem[j];//所以插入位置之后的元素后移一位
}
L.elem[i-1] = e;//在第i个位置赋值为e
++L.length;//长度增加1
return OK;
}
Status Delet_Sq(SqList &L,int i,ElemType e)//删除第i个元素
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1] = L.elem[j];//删除的元素之后全部前移动一位
}
e = L.elem[i];
--L.length;//长度减少1
return OK;
}
int main()
{
SqList L;
int i;//位序
int e;//返回的值
int locate;//查找出来的数
int number;//按位序查找的数
int inum;//要插入的数
int choose;//代表选择的操作
cout<<"1.建立顺序表\n";
cout<<"2.输入数据\n";
cout<<"3.进行值的查找\n";
cout<<"4.进行按序号查找\n";
cout<<"5.插入\n";
cout<<"6.删除\n";
cout<<"7.输出数据\n";
cout<<"0,退出\n";
// cout<<"\n";
choose = -1;
while(choose!=0)
{
cout<<"请输入你的选择\n";
cin>>choose;
switch(choose)
{
case 1:
if(InitList(L))
cout<<"新建成功!\n\n";
else
cout<<"新建失败!\n";
break;
case 2:
cout<<"请输入十个数\n\n";
for(i=0;i<10;i++)
cin>>L.elem[i];
L.length = 10;
cout<<endl;
break;
case 3:
cout<<"请输入要查询的数\n";
cin>>e;
locate = LocateElem_Sq(L,e);
if(locate!=0)
cout<<e<<"位序为"<<locate<<"\n";
else
cout<<"不存在这个数,查找失败!\n";
break;
case 4:
// int i;
cout<<"请输入要查找的位序\n";
cin>>i;
number = GetElem_Sq(L,i);
if(number == ERROR)
cout<<"查找失败,i不合法\n";
else
cout<<"位序为i的值是"<<number<<"\n";
break;
case 5:
cout<<"请输入要插入的位置和数\n";
cin>>i>>inum;
if(Intsert_Sq(L,i,inum))
cout<<"插入成功\n";
else
cout<<"插入失败!\n";
break;
case 6:
// int i;
cout<<"输入要删除的数的位序\n";
cin>>i;
if(Delet_Sq(L,i,e))
cout<<"删除成功"<<"删除的数为"<<e<<"\n";
else
cout<<"删除成功!\n";
break;
case 7:
//int i;
cout<<"现在顺序表的内容是:\n";
for(i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl<<endl;
break;
}
}
return 0;
}