顺序表的基本操作主要分为顺序表的初始化,取值,查找,插入,删除。
Status InitList(SqList &L);
Status GetElem (SqList L,int i,int &e);
Status LocatElem(SqList L,int e);
Status ListInsert(SqList &L,int i,int e);
Status ListDelete (SqList &L,int i);
其中取值和查找不需要改变顺序表的内容,所以在函数形参中L不加&,需要改变的函数则加&。参考文章:(https://blog.csdn.net/tingfengx/article/details/8787218)
预定义常量:
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define ERROR 0
#define OK 1
typedef int Status;
单链表的定义:
typedef struct
{
int *elem;
int length;
}SqList;
方法实现:
//顺序表的初始化
Status InitList(SqList &L){
L.elem=new int[MAXSIZE];
if(!L.elem)
exit(OVERFLOW);
L.length=0;
return OK;
}
//顺序表的取值
Status GetElem (SqList L,int i,int &e)
{
if(i<1||i>L.length)
return ERROR;
e=L.elem[i-1];
return OK;
}
//顺序表的查找
Status LocatElem(SqList L,int e)
{
for(int i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1;
return 0;
}
//顺序表的插入
Status ListInsert(SqList &L,int i,int e)
{
if((i<1)||(i>L.length+1))
return ERROR;
if(L.length==MAXSIZE)
return ERROR;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
//顺序表的删除
Status ListDelete (SqList &L,int i){
if((i<1)||(i>L.length))
return ERROR;
for(int j=i;j<=L.length;j++){
L.elem[j-1]=L.elem[j];
}
--L.length;
return OK;
}
//顺序表的合并(非递增)
void meger(SqList &A,SqList &B,SqList &C){
int i=0,j=0,k=0;
while(i<=A.length&&j<=B.length){
if(A.elem[i]>=B.elem[j])
C.elem[k++]=A.elem[i++];
else
C.elem[k++]=B.elem[j++];
}
while(i<=A.length){
C.elem[k++]=A.elem[i++];
}
while(j<=B.length){
C.elem[k++]=B.elem[j++];
}
C.length=A.length+B.length;
}
主函数:(测试以上函数)
int main()
{
int e
//创建三个顺序表并进行初始化
SqList W,L,X;
InitList(W);
InitList(L);
InitList(X);
for(int i=0;i<5;i++){
scanf("%d",&L.elem[i]);
L.length++;
}
for(int i=0;i<5;i++){
scanf("%d",&W.elem[i]);
W.length++;
}
meger(W,L,X);//合并L表和W表到X表
for(int i=0;i<X.length;i++){
printf("%d ",X.elem[i]);
}
printf("\n");
ListInsert(W,2,9);//添加操作,向w表中第二个位置插入9
int a=LocatElem(W,2);//查找操作,查找值为2的元素
GetElem(W,2,e);//取值操作,将第2个元素赋值给e
printf("%d %d\n",a,e);
ListDelete(W,6);//删除操作,删除w表第6个元素
for(int i=0;i<W.length;i++){
printf("%d ",W.elem[i]);
}
}
运行结果: