//2_a1.cpp 实验1 第1题参考答案
#include<iostream>
using namespace std;
typedef int datatype;
const int maxsize = 100;
typedef struct
{
datatype data[maxsize];
int n;
}sqlist;
sqlist* InitList()
{
sqlist * L = new sqlist;
L->n=0;
return L;
}
int Length(sqlist * L)
{
return L->n;
}
int Insert(sqlist * L, datatype x, int i)
{
int j;
if(L->n==maxsize)
{
cout<<"表满,不能插入!"<<endl;
return -1;
}
if(i<1 || i>L->n+1)
{
cout<<"非法插入位置!"<<endl;
return 0;
}
for(j=L->n ; j>=i ; j--)
{
L->data[j] = L->data[j-1];
}
L->data[i-1]=x;
L->n++;
return 1;
}
int Delete(sqlist * L , int i)
{//从顺序表中删除第i个位置上的结点
int j;
if(L->n==0)
{
cout<<"表空,不能删除!(下溢)\n";
return -1;
}
if(i<1 || i>L->n)
{
cout<<"非法删除位置!\n";
return 0;
}
for(j=i+1 ; j<=L->n ; j++)
L->data[j-2] = L->data[j-1];
L->n--;
return 1;
}
int Locate(sqlist * L , datatype x)
{
int i=1;
while(i<=L->n && L->data[i-1]!=x)
i++;
if(i<=L->n)
return i; //找到
else
return 0; //未找到
}
datatype Get(sqlist * L, int i)
{
if(i<1 || i>L->n)
{
cout<<"非法获取位置!\n";
return 0;
}
return L->data[i-1];
}
void Display(sqlist * L)
{
cout<<"线性表中的数据元素依次是 : ";
int i;
for(i=0;i<L->n;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl<<endl;
}
int main()
{
sqlist * List = InitList();
cout<<"调用InitList函数创建空表后:"<<endl;
cout<<"线性表的长度是:"<<Length(List)<<endl;
Display(List);
cout<<"以下四次调用Insert函数:"<<endl;
Insert(List,5,1);
cout<<"调用Insert函数,在当前第1个位置插入5之后:"<<endl;
Display(List);
Insert(List,6,1);
cout<<"调用Insert函数,在当前第1个位置插入6之后:"<<endl;
Display(List);
Insert(List,9,3);
cout<<"调用Insert函数,在当前第3个位置插入9之后:"<<endl;
Display(List);
Insert(List,8,3);
cout<<"调用Insert函数,在当前第3个位置插入8之后:"<<endl;
Display(List);
cout<<"调用Length函数,得到线性表的当前长度是:"<<Length(List)<<endl<<endl;
int r;
r=Locate(List,5);
cout<<"调用Locate函数,找到5在线性表中的位置是:"<<r<<endl<<endl;
Delete(List,2);
cout<<"调用Delete函数,删除第2个元素后:"<<endl;
Display(List);
cout<<"调用Length函数,得到线性表的当前长度是:"<<Length(List)<<endl<<endl;
datatype d;
d=Get(List ,3);
cout<<"调用Get函数获取得到该线性表的第3个元素是:"<<d<<endl<<endl;
return 0;
}