#include<cstdio>
#include<iostream>
//#include<algorithm>
using namespace std;
#define MAXSIZE 1000
typedef struct
{
int *elem;
int length;
} Seqlist;
//初始化顺序表
void InitList(Seqlist &L)
{
L.elem=new int[MAXSIZE];
if (!L.elem) exit(0);
L.length=0;
cout<<"顺序表初始化完毕"<<endl;
}
//求顺序表长度
int lengthList(Seqlist &L)
{
return L.length;
}
//顺序表读入值
void Creat(Seqlist &L,int n)
{
int e;
for (int i=0; i<n; i++)
{
cin>>e;
L.elem[i]=e;
L.length++;
}
}
//顺序表的插入
int Insert(Seqlist &L,int i,int e)
{
cout<<"请输入要插入的位置:";
cin>>i;
cout<<"请输入要插入的元素:";
cin>>e;
if(i<1||i>L.length+1)
{
cout<<"插入位置不合法"<<endl;
return 0;
}
if (L.length==MAXSIZE)
{
cout<<"储存空间已满"<<endl;
return 0;
}
//输入的i从1开始,在数组里对应的位置是L.elem[i-1]
for (int k=L.length-1; k>=i-1; k--)
L.elem[k+1]=L.elem[k];
L.elem[i-1]=e;
L.length++;
return 1;
}
//顺序表的删除
int Delete(Seqlist &L,int i)
{
cout<<"请输入要删除的元素的位置:";
cin>>i;
if (i<1||i>L.length)
{
cout<<"删除位置不合法"<<endl;
return 0;
}
for (int j=i; j<=L.length; j++)
L.elem[j-1]=L.elem[j];
L.length--;
return 1;
}
//顺序表的取值
int GetList(Seqlist &L,int i)
{
if (i<1||i>L.length)
{
cout<<"取值位置不合法"<<endl;
return 0;
}
int e=L.elem[i-1];
cout<<"第"<<i<<"个元素的值是:"<<e<<endl;
return 1;
}
/*int GetList1(Seqlist L,int k,int &e)
{
if (k<1||k>L.length)
{
cout<<"取值位置不合法"<<endl;
return 0;
}
e=L.elem[k-1];
return 1;
} */
//顺序表的查找
int SearchList(Seqlist L,int e)
{ int i=0;
while( i<=L.length&&L.elem[i-1]!=e)
i++;
if (L.elem[i-1]==e)
return i;
else
return -1;
}
//顺序表的输出
int Print(Seqlist L)
{
if (L.length==0)
{
cout<<"此顺序表为空表!"<<endl;
return 0;
}
for (int i=0; i<L.length; i++)
cout<<L.elem[i]<<" ";
cout<<endl;
return 1;
}
int main()
{
Seqlist L;
int n,e,x,k,i;
InitList(L);
cout<<"确定顺序表元素个数为:";
scanf("%d",&n);
cout<<"请输入这"<<n<<"个元素的:";
Creat(L,n);
cout<<endl;
cout<<" **请选择您想进行的操作** "<<endl;
cout<<" ----------------------------------"<<endl;
cout<<" | 1.给顺序表插入值 |"<<endl;
cout<<" | 2.给顺序表删除值 |"<<endl;
cout<<" | 3.取顺序表位置上一个值 |"<<endl;
cout<<" | 4.在顺序表中查找一个值 |"<<endl;
cout<<" | 5.求线性表长度 |"<<endl;
cout<<" | 6.退出操作 |"<<endl;
cout<<" ----------------------------------"<<endl;
cout<<"您选择的操作是是:" ;
while (1)
{
cin>>x;
switch(x)
{
case 1:
{
if (Insert(L,i,e))
{
cout<<"插入之后的数组:";
Print(L);
}
cout<<"-------------------------------------------"<<endl;
cout<<"您选择的操作是:";
break;
}
case 2:
{
if (Delete(L,i))
{
cout<<"删除之后的数组:";
Print(L);
}
cout<<"-------------------------------------------"<<endl;
cout<<"您选择的操作是:";
break;
}
case 3:
{
cout<<"请输入要取值的位置:";
cin>>k;
if (GetList(L,k))
cout<<"取值成功!"<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<"您选择的操作是:";
break;
}
case 4:
{
int e;
cout<<"请输入要查找的值:";
cin>>e;
k=SearchList(L,e);
if (k>0)
cout<<"查找成功!"<<endl<<"所在位置为:"<<k<<endl;
else
cout<<"查找失败!"<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<"您选择的操作是:";
break;
}
case 5:
{
cout<<"线性表长度为:";
cout<<lengthList(L)<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<"您选择的操作是:";
break;
}
case 6:
{
cout<<"操作结束!!"<<endl;
return 0;
}
default:
{
cout<<"请输入正确的序号!!";
cout<<endl<<"您选择的操作是:";
break;
}
}
}
}
形参Swqlist有时候使用&有时候不用
A:当需要修改源数据值的时候就需要带上&修改源地址对应的数据,当只是查找读取的话就是不需要的