/*顺序线性表的c++实现与测试*/
#include<iostream>
using namespace std;
/*数组空间大小*/
#define MAXSIZE 2
typedef int ElementType;
/*定义一个指向结构体LNode的指针的数据类型*/
typedef struct LNode *List;
/*定义Lnode结构体来表示线性表*/
struct LNode{
ElementType Data[MAXSIZE];
int last;/*线性表元素下标*/
};
/*生成一个空线性表*/
List MakeEmpty(){
List Ptrl;
Ptrl=(List)malloc(sizeof(struct LNode));/*为线性表分配内存空间*/
Ptrl->last=-1;/*线性表长度为零*/
return Ptrl;
}
/*在一个给定线性表中查找一个给定数值*/
int Find(ElementType x,List Ptrl){
int i=0;
while(i<=Ptrl->last&&Ptrl->Data[i]!=x)/*没找完整个表或找到给定值继续循环*/
i++;
if(i>Ptrl->last) return -1;/*在表中找不到给定值*/
else return i;/*找到给定值*/
}
/*在给定线性表的指定位置插入一个元素*/
void Insert(ElementType x,int i,List Ptrl){
int j;
if ( Ptrl->last == MAXSIZE-1){
cout<<"满了"<<endl;
return;
}/*线性表已满,无法插入*/
if(i<1||i>Ptrl->last+2){
cout<<"不合法"<<endl;
return;
}/*插入位置不合法*/
for(j=Ptrl->last;j>=i-1;j--)
Ptrl->Data[j+1]=Ptrl->Data[j];/*给定位置后面的元素依次后移一个位置*/
Ptrl->Data[i-1]=x;/*给定位置插入数值*/
Ptrl->last++;/*线性表长度加一*/
return;
}
/*给定线性表中删除指定位置的元素*/
void Del(int i,List Ptrl){
int j;
if(Ptrl->last==-1){
cout<<"空的"<<endl;
return;
}/*线性表为空*/
if(i<1||i>Ptrl->last+1){
cout<<"不合法"<<endl;
return;
}/*删除未知不合法,注意,顺序表的删除位置比插入位置少一个*/
for(j=i-1;j<=Ptrl->last;j++)
Ptrl->Data[j]=Ptrl->Data[j+1];/*元素前移*/
Ptrl->last--;/*长度减一*/
return;
}
/*主函数测试算法是否正确*/
int main(){
List L;
int v[3];
int k;
L=MakeEmpty();/*创建空顺序表*/
for(k=0;k<3;k++){
cin>>v[k];
Insert(v[k],k,L);
}/*依次插入三个元素,其中最后一个不合法*/
Find(5,L);/*查找值定数值*/
Del(1,L);/*删除一个元素*/
return 0;
}
#include<iostream>
using namespace std;
/*数组空间大小*/
#define MAXSIZE 2
typedef int ElementType;
/*定义一个指向结构体LNode的指针的数据类型*/
typedef struct LNode *List;
/*定义Lnode结构体来表示线性表*/
struct LNode{
ElementType Data[MAXSIZE];
int last;/*线性表元素下标*/
};
/*生成一个空线性表*/
List MakeEmpty(){
List Ptrl;
Ptrl=(List)malloc(sizeof(struct LNode));/*为线性表分配内存空间*/
Ptrl->last=-1;/*线性表长度为零*/
return Ptrl;
}
/*在一个给定线性表中查找一个给定数值*/
int Find(ElementType x,List Ptrl){
int i=0;
while(i<=Ptrl->last&&Ptrl->Data[i]!=x)/*没找完整个表或找到给定值继续循环*/
i++;
if(i>Ptrl->last) return -1;/*在表中找不到给定值*/
else return i;/*找到给定值*/
}
/*在给定线性表的指定位置插入一个元素*/
void Insert(ElementType x,int i,List Ptrl){
int j;
if ( Ptrl->last == MAXSIZE-1){
cout<<"满了"<<endl;
return;
}/*线性表已满,无法插入*/
if(i<1||i>Ptrl->last+2){
cout<<"不合法"<<endl;
return;
}/*插入位置不合法*/
for(j=Ptrl->last;j>=i-1;j--)
Ptrl->Data[j+1]=Ptrl->Data[j];/*给定位置后面的元素依次后移一个位置*/
Ptrl->Data[i-1]=x;/*给定位置插入数值*/
Ptrl->last++;/*线性表长度加一*/
return;
}
/*给定线性表中删除指定位置的元素*/
void Del(int i,List Ptrl){
int j;
if(Ptrl->last==-1){
cout<<"空的"<<endl;
return;
}/*线性表为空*/
if(i<1||i>Ptrl->last+1){
cout<<"不合法"<<endl;
return;
}/*删除未知不合法,注意,顺序表的删除位置比插入位置少一个*/
for(j=i-1;j<=Ptrl->last;j++)
Ptrl->Data[j]=Ptrl->Data[j+1];/*元素前移*/
Ptrl->last--;/*长度减一*/
return;
}
/*主函数测试算法是否正确*/
int main(){
List L;
int v[3];
int k;
L=MakeEmpty();/*创建空顺序表*/
for(k=0;k<3;k++){
cin>>v[k];
Insert(v[k],k,L);
}/*依次插入三个元素,其中最后一个不合法*/
Find(5,L);/*查找值定数值*/
Del(1,L);/*删除一个元素*/
return 0;
}