// 元素位置从1 开始 即是 第一个元素的位置为 1 而数组的第一个元素下标为0
#include<iostream>
#include<stdlib.h>
using namespace std;
#define maxSize 100
typedef int type;
//线性表结构体
typedef struct {
type data[maxSize];
type length;
} Sqlist;
//检查线性表是否为空
bool isEmpty(Sqlist *L){
return L->length<=0;
}
//初始化线性表
void init(Sqlist *L){
L->length=0;
}
//添加元素
void add(Sqlist *L,type x){
//防止数组越界
if(L->length>=maxSize) return ;
L->data[L->length++]=x;
}
//在指定位置插入元素
int insertElem(Sqlist *L,int q,type x){
//检查位置是否合法
if(q<1||q>L->length+1||L->length==maxSize) return 0;
//移动插入位置后面的元素
for(type i=L->length;i>=q;i--)
L->data[i]=L->data[i-1];
//插入元素类型如果是字符型的话 需要特殊处理 x+'0';
L->data[q-1]=x;
L->length++;
return 1;
}
//删除指定位置的元素
int deleteElem(Sqlist *L,int q){
if(q<1||q>=L->length) return 0;
for(type i=q;i<L->length;i++)
L->data[i-1]=L->data[i];
L->length--;
return 0;
}
//查找线性表中第一个值等于x的位置
int findElem(Sqlist *L,type x){
if(isEmpty(L)) return -1;
for(type i=0;i<L->length;i++)
if(x==L->data[i])
return i+1;
return 0;
}
//查找指定位置的元素
type getElem(Sqlist *L,int q){
if(q<1||q>=L->length)
return -1;
return L->data[q-1];
}
//清空线性表
void clearnSqlist(Sqlist *L){
L->length=0;
delete L;
}
//打印线性表
void print(Sqlist *L){
for(type i=0;i<L->length;i++)
cout<<L->data[i]<<" ";
cout<<endl;
}
int main(){
Sqlist *L;
L=(Sqlist *)malloc(sizeof(Sqlist));
init(L);
type x;
cin>>x;
while(x!=-1){
add(L,x);
cin>>x;
}
print(L);
cout<<L->length<<endl;
insertElem(L,1,10);
print(L);
cout<<L->length<<endl;
print(L);
deleteElem(L,4);
print(L);
cout<<findElem(L,4)<<endl;
cout<<getElem(L,2)<<endl;
clearnSqlist(L);
cout<<L->length;
return 0;
}
有不足之处,欢迎指正!