#include<iostream>
using namespace std;
#define MAXLENGTH 20
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct {
ElemType data[MAXLENGTH];
int length;
}SqList;
int get_elem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<1||i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
/*
** 初始条件:顺序线性表L已存在
** 操作结果:返回L中第1个与e满足关系的数据元素的位序。
** 若这样的数据元素不存在,则返回值为0
*/
int locate_elem(SqList L,ElemType e)
{
int i;
if (L.length==0)
return 0;
for(i=0;i<L.length;i++)
{
if (L.data[i]==e)
break;
}
if(i>=L.length)
return 0;
return i+1;
}
/*
**在L中第i个位置之前插入新的元素e,L的长度加1
*/
int list_insert(SqList *L, int i,ElemType e)
{
int k;
if(L->length==MAXLENGTH)
return ERROR;
if(i<1 || i>L->length+1) /*length 这里考虑到插入尾部的情况,插入尾部是尾部后一个元素的前一个位置进行插入,所以需+1*/
return ERROR;
if(i<=L->length){
for(k=L->length-1;k>=i-1;k--) /*将要插入位置后数据元素向后移动一位*/
L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
L->length++;
return OK;
}
/*
**删除L的第i个元素,并用e返回其值,L的长度减1
*/
int list_delete(SqList *L,int i, ElemType *e)
{
int k;
if(L->length==0)
return ERROR;
if(i<1 || i>L->length) /*删除位置超出范围*/
return ERROR;
*e=L->data[i-1]; /*保存返回值*/
if(i<L->length){ /*不含等于这种情况,等于是直接长度减1,不进行数据交换*/
for(k=i;k<L->length;k++)
L->data[k-1]=L->data[k]; /*将删除位置后继元素前移*/
}
L->length--;
return OK;
}
int main()
{
SqList linear_list={ /*线性表初始化*/
{1,2,3,4,5,6,8,9,10},
9
};
if(1==list_insert(&linear_list,7,7)){ /*第7个数位置钱插入7*/
cout<<"insert OK!"<<endl;
}else{
cout<<"insert ERROR!"<<endl;
}
int del_val=0;
if(1==list_delete(&linear_list,6,&del_val)){ /*将第六个位置的元素删除*/
cout<<del_val<<"is deleted!"<<endl;
}else{
cout<<"delete ERROR!"<<endl;
}
int get_val=0;
if(1==get_elem(linear_list,2,&get_val)){ /*获取第2个位置的元素*/
cout<<get_val<<"is got!"<<endl;
}else{
cout<<"get ERROR!"<<endl;
}
for(int i=0;i<linear_list.length;i++) /*结构体中的数组采用循环答应的方式输出*/
cout<<linear_list.data[i]<<endl;
cout<<locate_elem(linear_list,5)<<endl;
}#include<iostream>
using namespace std;
#defin