c语言 线性表是什么,C语言实现线性表

#include #include //提供malloc()原型/*线性表需要的方法:

1、 List MakeEmpty():初始化一个空线性表

2、 EementType FindKey(int K, List L):根据位序K,返回相应元素

3、 int Find(ElementType X,List L): 在线性表L中查找X的第一次出现位置

4、 void Insert(ElementType X,int i,List L): 在位序i前插入一个新元素X

5、 void Delete(int i , List L): 删除指定位序i的元素

6、 int Length(List L):返回线性表L的长度n*/

#define MAXSIZE 20

//define 预处理器指令,定义常量

typedefstruct LNode *List;

typedefintElementType;//定义数据结构的自定义名称

structLNode{

ElementType Data[MAXSIZE];//定义一个数组

int Last; //数组中最后一个元素位置

};struct LNode L; //声明一个struct LNode 型的变量L

List PtrL;//声明一个struct LNode * 型的指针变量PtrL//-> 间接运算符,与一个指向结构或联合的指针一起使用,标识该结构或联合的一个成员//访问下标为i的元素方法 L.Data[i] 或者 PtrL->Data[i]

List MakeEmpty()/*初始化,建立空的顺序表*/{

List PtrL;

PtrL= (List )malloc(sizeof(struct LNode)); //使用malloc()为结构分配足够的内存空间,并设置PtrL指向该位置

if(NULL ==PtrL)//malloc()是否成功请求到内存

{

printf("内存分配失败!");

exit(EXIT_FAILURE);//EXIT_FAILURE的值也被定义在stdlib.h中。标准提供了两个返回值以保证在所有操作系统中都能正常工作:EXIT_SUCCESS(或者,相当于 0)表示普通的程序结束, EXIT_FAILURE 表示程序异常中止。

}

PtrL->Last = -1;return PtrL; //返回结构指针

}intFind(ElementType X, List PtrL)/*查找*/{int i = 0; //声明并初始化变量i

while (i <= PtrL->Last && PtrL->Data[i]!=X) //i 小于等于数组元素数量并且数组i位置的元素与X不相等

{

i++;//i递增1

}if(i > PtrL->Last)//如果i大于了数组元素的数量

{return -1; //未找到

}else{return i;//否则返回i

}

}void Insert(ElementType X, inti, List PtrL)/*插入*/{int j;//声明变量j

if (PtrL->Last == MAXSIZE-1)

{

printf("表空间已满!");return;

}if (i < 1 || i > PtrL->Last+2)

{

printf("非法位置");return;

}for (j=PtrL->Last;j>=i-1;j--)//j初始化为数组元素长度,如果j大于等于i-1,

{

PtrL->Data[j+1] = PtrL->Data[j]; //将数组 j 位置的元素位置向后移动一位

}

PtrL->Data[i-1]=X; //在i-1的位置插入X

PtrL->Last++; //Last指向最后元素

return;

}void Delete(inti,List PtrL)/*删除*/{intj;if(i < 1 || i > PtrL->Last+1)

{

printf("%d元素不存在",i);return;

}for (j = i; i<= PtrL->Last;j++)

{

PtrL->Data[j-1] = PtrL->Data[j]; //将i位置的元素移动到i-1的位置

}

PtrL->Last--; //Last指向最后元素

return;

}int main(int argc,char const *argv[])

{

MakeEmpty();//初始化

int n = 10;int i = 1;intget_find;for (;i<=n;i++)

{

Insert(i,i,&L); //插入元素

}for (i=0;i

{

printf("%d",L.Data[i]); //打印插入的元素

}

printf("n");

get_find=Find(5,&L);//查找5的位置

printf("%d",get_find);//打印查找的位置

printf("n");

Delete(5,&L);//删除元素5

for (i=0;i

{

printf("%d",L.Data[i]); //打印插入的元素

}return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值