线性表的基本操作---顺序表(C语言)

线性表的操作-----顺序表(C语言)

下面有线性表的一些基本运算,有详细注释(学习笔记)

#define maxlen 1024
#define ERROR 0X80000000
typedef int ElemType;//这里可以把int改成任一类型
typedef struct{
	ElemType elem[maxlen];//C语言规定从0号元素放起
	int realen;//实际存放的数目 
}List; 

//初始化线性表
void InitList(List *L)
{
	L->realen=0;
} 
//判断线性表是否为空
int ListEmpty(List *L)
{
	return L->realen<=0;//健壮性更好 
} 
//判断线性表是否已满
int ListFull(List *L)
{
	return L->realen>=maxlen;
} 
//求线性表的长度  时间复杂度O(1) 
int ListLength(List *L)
{
	return L->realen;
} 
//获取线性表L第i个位置的元素  时间复杂度O(1) 随机存储 
ElemType GetElem(List *L,int idx)
{
	if(idx<0||idx>=L->realen)
		return ERROR;
	else
		return L->elem[idx];	
} 
//获取元素e在线性表L中所在的位置 时间复杂度O(n) 
int LocateElem(List *L, ElemType e)
{
	int i;
	for(i=0;i<L->realen;++i)
	{
		if(L->elem[i]==e)
		{
			return i;
		}
		return -1;
	}
}
//求位序idx的直接前驱 
ElemType PriorElem(List *L,int idx)
{
	if(idx<=0||idx>=L->realen)
	{
		return ERROR;
	}
	else
	{
		return L->elem[idx-1];
	}
}
//求位序idx的直接后继
ElemType NextElem(List *L,int idx) 
{
	if(idx<=0||idx>=L->realen)
	{
		return ERROR;
	}
	else
	{
		return L->elem[idx+1];
	}
}
//此函数将元素e插入指定位置idx
//基本操作都只是一个约定,并没有一个统一的必需遵守的规范
//基本思路:从后面往前面操作 时间复杂度O(n) 
int ListInsert(List *L,int idx,ElemType e)
{
	int k;
	if((idx<0)||(idx>L->realen)||ListFull(L))
	{
		return 0;
	}
	for(k=L->realen+1;k>idx;k--)
	{
		L->elem[k]=L->elem[k-1];
	}
	L->elem[idx]=e;
	L->realen++;
	return 1;
} 
//删除线性表L第idx个位置元素
//基本思路:从前往后操作 
int ListDelete(List *L,int idx)
{
	int k;
	if((idx<0)||(idx>L->realen)||ListFull(L))
	{
		return 0;
	}
	for(k=idx;k<L->realen-1;k++)
	{
		L->elem[k]=L->elem[k+1];
	}
	L->realen--;
	return 1;
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值