经过自己的一番努力,也是实现了线性表的基本操作,所以在这里分享给大家。如果大家有更好的方法,欢迎评论!
首先说以下感受,实现线性表的过程我觉得并不是很难,算法也都是很简单的算法,要说难点的话就是指针与结构了。因为如果不知道指针与结构的话,根本无从下手。当然了,我的博客中也有关于指针与结构的总结,欢迎大家观看!
废话不说了,给大家代码。
//线性表有关操作:初始化线性表、向线性表插入数据、从线性表中删除数据,删除l中第i个元素并返回给e、
//查询线性表,将l中第i个元素返回给e、显示线性表
#include<stdio.h>
#define ok 1
#define false 0
#define maxsize 10
//定义线性表的结构
typedef struct{
int list[maxsize];
int length;
}seqlist;
//1、初始化线性表
int initseqlist(seqlist *l){
l->length=0;
return ok;
}
//2、向线性表插入数据
int listinsert(seqlist *l,int i,int e){
int k;
if(i>l->length+1||i<1||i>maxsize){
return false;
}
if(i<=l->length){
for(k=l->length-1;k>=i-1;k--){
l->list[k]=l->list[k-1];
}
}
l->list[i-1]=e;
l->length++;
return ok;
}
//3、从线性表中删除数据,删除l中第i个元素并返回给e
int listdelete(seqlist *l,int i){
int result;
int k;
if(i<1||i>l->length){
return false;
}
if(i<l->length){
result= l->list[i-1];
for(k=i-1;k<=l->length-2;k++){
l->list[k]=l->list[k+1];
}
}
l->length--;
return result;
}
//4、查询线性表,将l中第i个元素返回给e
int getelem(seqlist *l,int i){
int *e;
if(i<1||i>l->length){
return false;
}
e=&l->list[i-1];
return *e;
}
//5、显示线性表
void seelist(seqlist *l){
int i;
for(i=0;i<l->length;i++){
printf("%d ",l->list[i]);
}
}
//进行测试
void main(){
int data;
seqlist list1;
//初始化线性表
printf("结果为1,证明初始化线性表成功:");
int result = initseqlist(&list1);
printf("%d\n",result);
//将1,2,3,4,5 5个值插入线性表中
printf("对线性表进行插入\n");
for(data=1;data<=5;data++){
listinsert(&list1,data,data*2);
}
printf("查看线性表:");
seelist(&list1);
//对线性表进行删除操作
int result2 = listdelete(&list1,3);
printf("\n");
printf("被删除的元素为:%d\n",result2);
printf("查看线性表:");
seelist(&list1);
printf("\n");
int result3 = getelem(&list1,3);
printf("查询线性表中的指定元素,%d",result3);
}
还有一个关于“->”与“.”的区别:如果是指针的话,就要用“->”来引用变量;如果是变量的话,就用“.”来引用变量。
以上就是我的代码,谢谢大家的观看,如果有问题欢迎评论,我会及时改正。