在这个地方我们通过C语言来演示创建线性表以及对线性表的一些操作。
怎样创建一个线性表:
typedef char ElemType
我们创建顺序表都是用来盛放元素,那我们盛放的数据元素,可以是基本的数据类型,也可以是我们自定义的数据类型。
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
所谓的线性表也也就是为自定义的数据结构申请一段内存空空间。然而这个自定义的数据结构,里面的数据元素室友一定的要求的,需要有三个部分是必须的,第一个是我们要存放的数据的类型,第二个是我们要创建的顺序表的长度长度是顺序表中的存放的元素的个数,第三个是顺序表的大小。
int InitSqList(SqList *L)
{
L->elem=(ElemType *)malloc((LIST_INIT_SIZE)*sizeof(ElemType));
if(!L->elem)exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
cout<<"\t\t顺初始化成功\n";
return OK;
}
那么怎样初始化一个顺序表,,首先我们要知道我们初始化顺序表,其实是为我们上面定义的数据结构进行赋值
首先我们是给我需要盛放的元素申请一段内存空间,然后赋值给我们在数据结构中中的元素,其实这个也即是我们初始化一个链表。总之,初始化一个链表就是为我们自定义的结构体进行赋值。
向顺序表中插入一个元素:
int InsertSqList(SqList *L,int i,ElemType e)//向顺序表中插入元素,我们需要给这个函数传递三个参数,一个顺序表一个指针,还有是我们要讲元素插入到顺序表中的位置,还有就是我们要插入的元素。
{//向顺序表中插入元素,需要三个步骤,第一步是检验顺序表是不是已经满
//第二步是判断要插入的位置是不是合法
//当上面两个条件检验完成之后,需要做的是讲顺序表中的要插入的位置后面的元素,向后面进行转移
int j;
if(i<1 && i>L->length)
{
cout<<"插入位置不合法"<<endl;
return 0;
}
else
{
if(L->length==L->listsize)
{
cout<<"顺序表已经满"<<endl;
return 0;
}
for(j=L->length;j>=i;j--)
L->elem[j+1]=L->[j];
//这个for循环就完成了元素的转移,这个地方是有些技巧的,至少我是这样的认为的,因为这个for循环的里面的j的初值是L->length,控制条件是j<=i;其实这个地方,和删除顺序表中的一个元素,是正好相反的。
L->elem[i]=e;
L->length++;
return 1;
}
}
上面是初始化一个顺序表,然后向顺序表中执行一个插入操作。
给出一个元素,能不能判断这个元素顺序表中是不是存在,和如果这个元素是存在的,要给出这个元素在顺序表中的位置
int getElemLocation(SqList *L,ElemType e)
{
int i=0;
for(i=0;i<=L->length && L->elem[i]!=e;i++);//确定元素在表中的位置,其实我们需要的这样的一个循环
if(i>L->length)cout<<"没有找到元素"<<x<<endl;
else
cout<<x<<"在表中的位置是"<<i<<endl;
return 1;
}
//其实从上面我们可以看到的是对顺序表的操作,其实也就是对刚开始我们自定义的结构体的一个操作,然后上面看整个顺序表其实也就是,
那么我们怎样从顺序表中删除一个元素
int deleteElemList(SqList *L,int i)
{
int j;
if(1<=i && i<=L->length)
{
for(j=i;j<=L->length;j++)
{
L->elem[j]=L->elem[j+1];
}
L->length--;
return 1;
}
else
{
cout<<"位置不合法"<<endl;
return 0;
}
}
//删除顺序表中的需要执行的操作是首先是检验位置是不是合法的,当检验了位置之后,我们需要进行的操作是检验我们要删除的元素的位置是不是合法的,第二步当位置合法之后,我们需要做的是将顺序表i之后的元素位置doublet向前移动一个位置。
那么怎样来显示顺序表中的元素:
int showElem(SqList *L)
{
//首先是判断这个顺序表是不是存在
if(!L->elem)
{
cout<<"顺序表不存在"<<endl;
return 0;
}
else
{
for(int i=1;i<=L->length;i++)
cout<<L->elem[i]<<endl;
}
}
//上面顺序表中的元素doublet输出,这个地方要判断的是顺序表是不是存在。
到这个地方我们对顺序表的操作已经完成了。