线性表的操作:
(1)线性表的建立和初始化初始化
#define ListInitSize 100//初始时线性表的内存
#define ListIncerment 10//当内存不足时追加的内存
typedef struct
{
int *base;
int length;
int listsize;
}SqList;
//初始化操作
void InitSqList(SqList &L)
{
L.base = (int*)malloc(ListInitSize*sizeof(int));
if(!L.base){
cout << "分配失败";
return ;
}
L.length = 0;
L.listsize = ListInitSize;
}
(2)线性表的遍历
for(int i = 0;i < L.length;i++){
cout << L.base[i] << " ";
}
(3)线性表查找某元素的位置
int chazhao(SqList L,int e)
{
if(L.length == 0)//判断是否为空表
return 0;
for(int i = 0;i < L.length;i++){//从头遍历
if(L.base[i] == e)
return i;//返回该元素的位置i+1
}
return -1;//没有找到返回-1
}
(4)线性表删除某元素
void deleteElem(SqList &L,int e)
{
for(int i = 0;i <L.length;i++){//遍历找元素
if(L.base[i] == e){
for(int j = i;j < L.length-1;j++){//找到之后,将后面的元素往前移动一位
L.base[j] = L.base[j+1];
}
L.length--;//移动后,线性表L的长度减一
i--;//i减一是为了回到该位置,判断以后到该位置的元素是否还存在该元素
}
}
}
(5)将两个递增的线性表合并为一个递增的线性表
方法一:另外开辟一块空间来存储(Lc)
void SetMerge(SqList &La,SqList &Lb,SqList &Lc)
{
Lc.listsize = La.length+Lb.length;
int i,j,k;
i = j = k = 0;
while(i < La.length && j < Lb.length){//两个表有一个表到头了就结束
if(La.base[i] <= Lb.base[j])//判断元素的大小,将大的元素放到C表中
Lc.base[k++] = La.base[i++];
else
Lc.base[k++] = Lb.base[j++];
}
while(i < La.length)//跑完前一个循环之后将还有元素的表的元素直接添加到C表中
Lc.base[k++] = La.base[i++];
while(j < Lb.length)
Lc.base[k++] = Lb.base[j++];
Lc.length = k;
}
方法二:不另外开辟空间