作为数据结构初学者的我,昨天学习了线性表,现来总结一下
首先顺序表顾名思义 像线一样串联在一起的数据存储称为线性表
首先就是建立一个表了吧 #include<stdio.h> #define maxlen 100
typedef struct {
int data[maxlen];
int length;
}List; //定义一个名为List的结构 其中包含一个数组以及表长
void first(List L){
L.length =0;
} //用结构体List定义一个名为L的顺序表 并对其进行初始化 是表长为0
这样一个初始的顺序表就建立完成了 然后就要对其进行操作 1.添加数据
void addList(List &L,int i,int e){
if(i<0||i>L.length||L.length==maxlen){
printf("添加失败");
} //在这里对插入位置i进行了判断 i的位置不能不在表的范围以及表满的情况不能添加新的元素
for(int a=L.length-1;a>=i;a--){
L.data[a+1]=L.data[a];
}
L.length++;
} //对插入位置i以后的元素进行了遍历 使得每一个元素都向后移动一位
2.删除数据(按位删除)
void deleteList(List &L,int i,int &e){
if(i<0||i>L.length){
printf("删除失败");
} //同添加一样对删除数据位置i进行判断
for(int a=i;a<L.length-1;a++){
L.data[a]=L.data[a+1];
}
L.length--;
} //对删除位置i以后进行遍历 使得每一位元素向前移动一位
删除元素(按值删除)
void deleteList(List &L,int i,int &e){
int a,b,c;
for( a=0;a<L.length-1;a++){
e = L.data[a];
if(e ==i){
b = a;
printf("被删除的元素是:");
scanf("%d",e);
printf("被删除元素位置是:");
scanf("%d",b);
}
for(c=L.length-1;c>=b;c++){
L.data[c]=L.data[c+1];
}
L.length--;
}
}
3.查询数据 (按位查询)
void checkList(List L,int i,int &e){
if(i<0||i>L.length){
printf("查询失败");
}
e = L.data[i];
} //对查询位置元素进行查询 直接返回其值即可
查询数据(按值查询)
void checkList(List L,int i,int &e){
int q,w;
for(q=0;q<L.length-1;q++){
e = L.data[q];
if(e==i){
w=q;
}
printf("查询数据的位置是:");
scanf("%d",w);
}
}
那么说到线性表,肯定会联想到他有什么优缺点呢
优点:判断位置关系时其物理位置关系就是其逻辑位置关系——物理上左右逻辑上前驱后继
存储数据时可以随机存储
简称:地址连续,类型相同,一次存放,随机存取
缺点:在添加删除操作时需要将其位置后的每一个元素都移动
在建立表的时候不确定要建多大的表从而导致资源浪费,空间利用率低