线性表静态分配及初始化
//静态分配
typedef struct{
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &l){
for (int i=0; i<MaxSize; i++) {
l.data[i]=0;
}
l.length=0;
}
动态分配及初始化
//malloc函数的头文件
#include <stdlib.h>
//动态分配
typedef struct{
int *data;
int MaxSize;
int length;
} SeqList;
void InitList(SeqList &l){
l.data=(int*)malloc(InitSize*sizeof(int));
l.length=0;
l.MaxSize=InitSize;
}
//增加长度
void IncreaseSize(SeqList &l,int len){
int *p=l.data;
l.data=(int*)malloc((l.MaxSize+len)*sizeof(int));
for (int i=0; i<l.length; i++) {
l.data[i]=p[i];
}
l.MaxSize=l.MaxSize+len;
free(p);
}
在第i个位置上插入
注意i是位序,这里给出的是健壮的代码,把错误情况也考虑进去了
//位序i所在的范围应该是1到legth+1之间,并且不能插入已经满了的顺序表
bool ListInsert(SqList &l,int i,int e){
if (i<1||i>l.length+1) {
return false;
}
if (l.length>=MaxSize) {
return false;
}
for (int j=l.length; j>=i; j--) {
l.data[j]=l.data[j-1];
}
l.data[i-1]=e;
l.length++;
return true;
}
顺序表的删除,此处没有单独考虑当表为空的时候,删除的报错,是因为第一个判断里其实已经包含了表为空的判断,即当表为空,也就是长度为0时,i要么小于1报错,要么大于等于1,此时大于length也是报错
bool ListDelete(SqList &l,int i,int &e){
if (i<1||i>l.length) {
return false;
}
e=l.data[i-1];
for (int j=i; j<l.length; j++) {
l.data[j-1]=l.data[j];
}
l.length--;
return true;
}
按位查找,比较简单
//按位查找
int search(SqList l,int i){
return l.data[i];
}
按值查找,注意我们这里需要返回的是位序,也就是索引+1,返回0表示查找失败,如果我们这里用索引进行返回的话,可以设置返回-1表示查找失败
//按值查找
int locate(SqList l,int e){
for (int i=0; i<l.length; i+&#