c语言中线性表,用c语言实现线性表的基本操作
#包含stdio.h
#包含stdlib.h
#define KSIZE 10//Define常数:线性表的长度。
#定义假0
#定义正确1
/************************************************************************/
/*线性列表(linear list)
线性表是一种灵活的数据结构,其长度可以根据需要增加或缩短,即线性表的数据元素不仅可以被访问,还可以被插入和删除。
抽象线性表如下:
ADT:抽象数据类型抽象数据类型
ADT列表
L:L:LIST的简称,也就是线性表本身
I:索引
e:element的简称,即元素
Cur _: short cur_:current,即当前元素。
Pre_:previous,即前一个元素
Next_:下一个,即下一个元素
访问:访问元素的方式。
List (l) l你可以把它想象成一个容器(数组):初始化线性表。
DestroyList( L) L你可以把它想象成一个容器(数组):销毁线性表。
ClearList( L) L你可以把它想象成一个容器(数组):清空线性表。
ListEmpty(L) L你可以把它想象成一个容器(数组):线性表是空的吗?
Length (l) l你可以把它想象成一个容器(数组):线性表中元素的个数。
GetElem(L,I,e)L你可以把它看成一个容器(数组)。I代表指数。e得到的元素是什么?获取线性表中指定的元素。
LocateElem(L,E,compare())L你可以把它想象成一个容器(数组),E代表从数组中寻找这个E元素:给定的元素得到它第一次出现的索引位置。
Prielem (L,cur_e,pre_ e)表示获取L表示数组cur _ e表示指定元素,pre _ e表示指定元素的前一个元素:给定元素获取其前一个元素。
NextElem(L,cur_ e,next_ e)表示获取L表示数组cur_e表示指定元素,next_ e表示指定元素的下一个元素:给定元素获取下一个元素。
ListInsert( L,I,e) L你可以把它看成一个容器(数组)I在指定位置E插入的元素是什么?将元素插入链表中的指定位置。
ListDelete( L,I,e) L你可以把它想象成一个容器(数组)。我指定元素e,删除的元素是什么?从链表中的指定位置删除元素。
ListTraverse(L,visit())遍历数组:遍历元素。
简单的线性表-C语言实现
线性表的组成类型:int array */
/************************************************************************/
/* -
初始列表(
销毁列表(
清除列表(
list empty(L);
列表长度(L);
GetElem(L,I,
LocateElem(L,e,compare());
ListInsert( L,I,e);
ListDelete( L,I,
ListTraverse(L,visit());
PriorElem(L,cur_ e,pre _ e);
NextElem(L,cur_ e,next _ e);
- */
int计数;
void InitList(int * list);//InitList( L)代表*
void DestroyList(int * list);
void clear list(int * list);
int list empty(int * list);
int list length(int * list);
int GetElem(int *list,int i,int * e);
int LocateElem(int *list,int e);
int ListInsert(int *list,int i,int e);
int ListDelete(int *list,int i,int * e);
void list traverse(int * list);
int main(void)
{
int arr[KSIZE];
int e=0;
InitList(arr);
ListInsert(arr,0,5);
ListInsert(arr,0,8);
ListInsert(arr,1,7);
list traverse(arr);
ListDelete(arr,0,NULL);
list traverse(arr);
GetElem(arr,1,e);
printf(e=%d\n ,e);
printf( 5的索引是% d \ n ,locatelem (arr,5));
清除列表(arr);
if(ListEmpty(arr))
{
Printf(线性表为空\ n );
}
其他
{
Printf(线性表不为空\ n );
}
Printf(线性表长度为%d\n ,list length(arr));
DestroyList(arr);
系统(“暂停”);
返回0;
}
Void InitList(int *list)//L你可以把它看成一个容器(数组):初始化线性表
{
int I=0;
count=0;
for(I=0;我KSIZEI )//遍历线性表,赋值0,相当于初始化。
{
list[I]=0;
}
}
void DestroyList(int *list)
{}
Void ClearList(int *list)//L你可以把它想象成一个容器(数组):清空线性表。
{
int I=0;
count=0;
for(I=0;我KSIZE我)
{
list[I]=0;//和初始化一样,相当于清空线性表。
}
}
Int empty (int * list)//l你可以把它想象成一个容器(数组):线性表是空的吗?
{
If(count==0)//判断线性表是否为空。如果==0表示空,则为真。意思是有,而且是空的!
{
返回TRUE
}
其他
{
返回FALSE
}
}
int length(int * list)//返回线性表的长度(看到这里你就明白了)# define k size 10 int arr[k size]list length(arr)
{
返回计数;
}
Getelem (int * list,int I,int * e)//L你可以把它想象成一个容器(数组)。I代表索引e代表获得的元素。这是什么?获取线性表中指定的元素。
{
If(i count i=0)//索引必须大于等于0,因为索引是从零开始的。I必须小于count,因为它不能大于数组。
{
*e=列表[I];//获取的元素在索引1的位置,这个位置赋给了*e,也就是说*e知道要获取哪个元素。
返回TRUE
}
其他
{
返回FALSE
}
}
Intlocatelem (int * list,int e)//l你可以把它看成一个容器(数组),e的意思是找出数组中是否有这个e元素:给定的元素得到它第一次出现的索引位置。
{
int I=0;
for(I=0;我数;I )//遍历线性表的数组,
{
If(list[i]==e)//如果数组元素等于e,则输出其索引位置。
{
返回I;
}
}
return-1;
}
/************************************************************************/
/*
-
0 1 2 3 4
-
*/
/************************************************************************/
Int list insert (int * list,int i,int e)//L你可以把它看成一个容器(数组)I在指定位置e插入的元素是什么?将元素插入链表中的指定位置。
{
If(i=count i=0)//Why (i=count,因为插入位置应该是1
{
int k=0;
for(k=count-1;k=I;k -)
{
list[k 1]=list[k];//以上都是后退一位的元素。
}
list[I]=e;//那么E代表list[0]
数数;//然后count又代表满,它的计数又扩大了。
返回TRUE
}
其他
{
返回FALSE
}
}
Int delete (int * list,int I,int * e)//L你可以把它看成一个容器(数组)。我指定e删除什么元素。从链表中的指定位置删除元素。
{
If(我数i=0)//删除不展开空间。
{
int k=0;
如果(e!=NULL)//e赋给*e,表示*e是要删除的元素。这是什么?
{
*e=列表[I];
}
for(k=I;k计数-1;K )//向前迈一步
{
list[k]=list[k 1];
}
count-;//然后count -,表示删除成功。
返回TRUE
}
其他
{
返回FALSE
}
}
void ListTraverse(int *list)
{
int I=0;
for(I=0;我数;我)
{
printf(%d ,list[I]);//只遍历元素输出。
}
printf( \ n );
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。