顺序表比较容易理解,可以使用数组或者结构体实现,课程中给出的例子是一个很好的顺序表的例子:
#include <stdio.h>
#define MAX 10
struct SList{ //定义顺序表的结构体
int data[MAX];
int length;
};
void init(struct SList *p){
p->length = 0;
}
void print_list(const struct SList *p){
int i;
for(i=0;i<p->length;i++)
printf("%d, ",p->data[i]);
printf("\n");
}
int insert(struct SList *p,int k,int x){
if(k<0||k>p->length||p->length==MAX-1) return 0;
else{
int i;
for(i=p->length-1;i>=k;i--){
p->data[i+1]=p->data[i];
}
p->data[k]=x;
p->length++;
return 1;
}
}
int delete(struct SList *p,int k,int *px){
if(k<0||k>=p->length) return 0;
else{
*px=p->data[k];
int i;
for(i=k+1;i<p->length;i++)
p->data[i-1]=p->data[i];
p->length--;
return 1;
}
}
int main(){
struct SList a;
init(&a);
// int k=0,x=11;
insert(&a,0,11);
insert(&a,0,22);
insert(&a,1,33);
print_list(&a);
int x;
delete(&a,1,&x);
print_list(&a);
return 0;
}
这个例子有以下比较好的地方值得学习:
- 数据量较大的数据类型采用传指针的操作:数据量比较大传指针比传值更好,传值会将数据进行拷贝,效率不高。
- 函数的定义和使用:要善于将常用且单一的功能封装为函数。