顺序表创建、查找、插入、删除操作集(c语言实现)
刚开始学数据结构,看c语言版本的,但看书总是想不通,网上荡的资源也是错的(而且错的很离谱)就自己试着操作了一下,发现还是很棘手的。我编写的每个函数参数都是用指向结构的指针来操作,这样的可以保证改变主调函数中的实参,并且用了malloc()函数对内存块进行了分配。
ps:小白一个,新手有不足之处请见谅…
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
(用typedef增强代码的可移植性)
typedef int ElemType;
typedef int STATUS;
typedef struct Li{
ElemType arr[MAXSIZE]; // typedef 类型 ElemType;
int length; //构造的表的长度
} * sqlist; //新类型名*SqList,是一个指针,用于创建一个新的顺序表
sqlist EemtyMake();
int LocateElem (sqlist L , ElemType e);
STATUS Insert (sqlist L,int i,ElemType e);
STATUS Delete (sqlist L,int i);
int main()
{
sqlist L = EemtyMake();
printf("请输入表的长度(最大不超过100):");
int n;
scanf("%d",&n);
L->length = n;
printf("请输入需要定义好的元素: ");
int i;
for(i = 0;i<L->length;i++){
scanf("%d",&L->arr[i]);
} //录入元素完毕
printf("你输入的表是: \n");
for(i = 0;i<L->length;i++){
printf("%d ",L->arr[i]);
}
printf("\n");
int num ;
printf("请输入你要检索的元素: ") ;
while(scanf ("%d",&num)==1){
LocateElem(L,num);
printf("请输入你要检索的元素: ") ;
}
printf("查找完毕!\n") ;
Insert (L,2,2);
printf("你的顺序表是: \n");
for(i = 0;i<L->length;i++){
printf("%d ",L->arr[i]);
}
printf("\n");
Delete (L,2);
printf("你的顺序表是: \n");
for(i = 0;i<L->length;i++){
printf("%d ",L->arr[i]);
}
}
/*建立一个空表*/
sqlist EemtyMake(){
sqlist list;
list = (sqlist)malloc(sizeof(struct Li));(为了让传入的形参指针初始化,并返回初始化后的指针)
list->length =0;
return list;
}
/*检索一个元素*/
int LocateElem (sqlist L , ElemType e){
int i;
int judge = 0;
for(i = 0;i<L->length;i++){
if (L->arr[i] == e){
judge = 1;
printf("%d ",i+1);
printf("\n");
}
}
if (judge == 0){
printf("你要找的元素不存在\n");
return 0;
}
else return 1;
/*查找的次数平均是n/2;*/
}
/*插入一个元素*/
STATUS Insert (sqlist L,int i,ElemType e){
//新定义一个STATUS类型,用以函数返回 0 or 1
STATUS ERROR = 0;
STATUS OK = 1;
if (i<1 || i>L->length)
return ERROR;
else{
int j ;
for (j = L->length-1;j>=i-1;j--){
L->arr[j+1] = L->arr[j];
}
L->arr[i-1] = e;
L->length++;
return OK;
}
}
/*删除一个元素*/
STATUS Delete (sqlist L,int i){
STATUS ERROR = 0;
STATUS OK = 1;
if (i<1 || i>L->length)
return ERROR;
else{
int j ;
for (j = i;j<=L->length-1;j++){
L->arr[j-1] = L->arr[j];
}
L->length--;
return OK;
}
}
以下是输出结果: