商城版免费网站,自己做网站需要多少钱,百度广告联盟推广链接,做网站可以用什么数据库线性表是数据结构中最基本和简单的一个#xff0c;它是n的相同类型数据的有序序列#xff0c;我们也可以用c语言中的数组来理解线性表。
一、线性表声明 我们定义一个线性表的结构体#xff0c;内部有三个元素#xff1a;其中elem是一个指针#xff0c;指向线性表的头它是n的相同类型数据的有序序列我们也可以用c语言中的数组来理解线性表。
一、线性表声明 我们定义一个线性表的结构体内部有三个元素其中elem是一个指针指向线性表的头length记录线性表元素个数listsize记录线性表的总长度。
//
// Created by 111 on 2024/11/15.
//#ifndef TEST1_LINELIST_H
#define TEST1_LINELIST_H#define OK 1
#define ERROR 0#define LIST_INIT_SIZE 30 //初始化线性表大小
#define LIST_INCREMENT 10 //线性表长度不够时每次动态增加的长度typedef struct
{int *elem; //指向线性表的头int length; //线性表元素个数int listsize; //线性表总长度
}LineList;int initLineList(LineList *);int lineListInsert(LineList *,int,int);int lineListDelete(LineList *,int);int printLineList(LineList *);int freeLineList(LineList *);int lineListLocateElem(LineList *,int elem);#endif //TEST1_LINELIST_H二、线性表初始化 我们通过初始化函数进行线性表的空间申请一开始我们申请可以存有30个元素的线性表具体函数如下
int initLineList(LineList *L)
{L-elem (int *)malloc(LIST_INIT_SIZE*sizeof(int)); //动态申请堆空间初始化30个元素if(!L-elem){printf(LineList allocate failed!); //申请失败提示错误推出程序exit(ERROR);}L-length 0; //记录元素个数L-listsize LIST_INIT_SIZE; //记录线性表总大小return OK;
}
三、插入元素 插入元素我们通过指定位置进行插入如果插入位置超过元素最大位置1则抛错如果中间位置进行元素插入我们则需要将后面的元素进行后移。 int lineListInsert(LineList *L,int i,int newelem)
{int *tmpaddr; //用来存放扩展后的线性表地址int *tmpdata; //用来存放临时元素的地址int *q;if(i1||iL-length1) //如果超过位置则报错return ERROR;if(L-lengthL-listsize){tmpaddr (int *)realloc(L-elem,(L-listsizeLIST_INCREMENT)*sizeof(int));//元素个数超过线性表最大大小则进行动态扩展if(!tmpaddr){printf(linesize reallocate failed!\n);exit(ERROR);}L-elem tmpaddr;//线性表新地址L-listsize LIST_INCREMENT;//线性表总大小该表}tmpdata (L-elemi-1);for(q (L-elemL-length-1);qtmpdata;--q) //从线性表最后一个元素开始进行元素后移*(q1) *q; //插入元素*tmpdata newelem;L-length;return OK;
}
四、删除元素 删除一个元素后我们需要将后续的元素进行前移动确保线性表的连续 int lineListDelete(LineList *L,int index)
{if(index1||(indexL-length)) //错误的位置返回ERROR{return ERROR;}int *tmpdel L-elemindex; //临时存放删除元素的后一个元素int *mp L-elem L-length -1; //指向最后一个元素for(tmpdel;tmpdelmp;tmpdel){ //从删除位置开始进行元素前移*(tmpdel-1) *tmpdel;}--L-length;return OK;}
五、元素定位 返回第一个匹配元素的位置如果都不匹配则返回0.
int lineListLocateElem(LineList *L,int elem)
{int i1;int *p L-elem;while(iL-length(*p)!elem)i;if(iL-length)return i;elsereturn 0;
}
六、打印线性表
int printLineList(LineList *L)
{int *p L-elem;for(int i 0 ;iL-length;i){printf(the %d element is %d\n,(i1),*(L-elemi));}return OK;
}
七、释放空间
int freeLineList(LineList *L)
{free(L-elem);return OK;
}八、测试 我们在main函数中进行测试的编写验证上述函数的功能。
int main() {LineList l;initLineList(l);lineListInsert(l,1, 10);lineListInsert(l,2, 18);lineListInsert(l,2,20);printLineList(l);lineListDelete(l,2);printf(after the linelist deleted.....\n);printLineList(l);freeLineList(l);return 0;
}