#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:当需要修改源数据值的时候就需要带上&修改源地址对应的数据,当只是查找读取的话就是不需要的