以数组的方式实现(下列文件都在一个项目中)
测试文件(main.c)
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
int main()
{
arraylist arr1;
//初始化
init(&arr1);
//添加
add(&arr1,23);
add(&arr1,2);
add(&arr1,9);
add(&arr1,10);
int i;
for(i=0;i<arr1.length;i++)
printf("%d ",arr1.data[i]);
//查找
int index=searche(arr1,10);
printf("\n值为10的元素下标为%d\n",index);
//删除
bool b=del(&arr1,23);
if(b==false)
printf("删除失败");
else
printf("删除成功");
for(i=0;i<arr1.length;i++)
printf("%d ",arr1.data[i]);
printf("\n");
//change元素值
bool b1=change(&arr1,10,43);
if(b1==false)
printf("修改失败");
else
printf("修改成功");
for(i=0;i<arr1.length;i++)
printf("%d ",arr1.data[i]);
return 0;
}
接口(list.h)
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include <stdbool.h>
#define MAX 100
typedef struct{
int length;
int data[MAX];
}arraylist;
//初始化线性表
void init(arraylist *);
//添加元素
bool add(arraylist *,int);
//删除元素
bool del(arraylist *,int);
//改变元素
bool change(arraylist *,int ,int);
//查找元素
int searche(arraylist L,int e);
#endif // LIST_H_INCLUDED
接口实现文件(list.c)
#include <stdio.h>
#include <stdbool.h>
#include "list.h"
void init(arraylist *L)
{
L->length=0;
}
bool add(arraylist *L,int e)
{
if(L->length>=MAX-1)
return false;
L->data[L->length++]=e;
return true;
}
int searche(arraylist L,int e)
{
int i;
for(i=0;i<L.length;i++)
if(e==L.data[i])
return i;//如果找到,返回下标
return -1;//如果找不到,则表明查找失败,返回-1
}
bool del(arraylist *L,int e)
{
int i;
int index=searche(*L,e);//要删除元素的下标
if(index==-1)//如果要删除的元素不存在的话,就返回false
return false;
for(i=L->length-2;i>=index;i--)//i从倒数第二个元素开始.
{
L->data[i]=L->data[i+1];//后面的元素赋值给前面的元素
}
L->length--;//删除完后要把线性表的长度减一
return true;
}
bool change(arraylist *L,int e1,int e2)
{
int index=searche(*L,e1);//需要change的元素的下标
if(index==-1)
return false;
L->data[index]=e2;
return true;
}
遇到的问题:
- 如果要在主函数中改变线性表,那么传递参数时应该加上‘&’。
- 如果在实现类的各个函数中使用length,不能直接写length,而是应该写成L->length或者L.length。
- 测试文件和接口实现文件都要加上#include “list.h”