数据结构day3 2019.7.5

本文详细介绍了线性表的顺序存储结构及其基本操作,包括初始化、查找、插入、删除和合并等,并提供了具体的C语言实现代码。通过实例解析,帮助读者深入理解线性表的内部机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性表的顺序存储

在这里插入图片描述

  • 初始化
typedef struct//init为空线性表 
{
	ElemType elem[MAXSIZE];
	int length;//教材上写的是last,其实就是现有长度的意思,写length更好理解 
}SeqList;
  • 查找
int GetData(SeqList L,int i)//按序号查找 
{
	if(i<1||i>L.length)
		return ERROR; 
	return L.elem[i-1];
}

int Locate(SeqList L,ElemType e)//按内容查找 
{
	int i;
	for(i=0;i<L.length;i++)
	{
		if(e==L.elem[i])
			return (i+1);
	}
	return ERROR;
}
  • 插入
int InsList(SeqList *L,int i,ElemType e)
{
	int j=L->length;       
	if(L->length==0)//空表 
		return ERROR; 
	if(L->length>=MAXSIZE)
	{ 
		printf("表已经插满!");
		return ERROR;
	} 
	if(i<L->length)//如果不是表尾,就需要依次后移 
	{
		while(j>=i)
		{
			L->elem[j]=L->elem[j-1];//注意线性表是从1开始,二数组是从0开始的 
			j--;
		}
	}
	L->elem[i-1]=e;
	L->length++;
	return OK;
} 
  • 删除
int DelList(SeqList *L,int i,ElemType *e)
{
	if(L->length==0||i<1||i>L->length)//空表或者不在表内 
		return ERROR;
	e=&L->elem[i-1]; 
	while(i<=L->length)
	{
		L->elem[i-1]=L->elem[i];
		i++;
	}
	L->length--; 
	return OK;
}
  • 合并
int merge(SeqList *LA,SeqList *LB,SeqList *LC)
{
	int i=0,j=0,k=0;//用于记录LABC操作到第几个数了
	while(i<LA->length&&j<LB->length)//当a,b表都还没结束时 
	{
		if(LA->elem[i]<=LB->elem[j])
		{
			LC->elem[k]=LA->elem[i];
			k++,i++;
		}
		else
		{
			LC->elem[k]=LB->elem[j];
			k++,j++;
		}
	} 
	while(i<LA->length) //如果AB表还有多余的继续插入 
	{
		LC->elem[k++]=LA->elem[i++];
		i++,k++;
	}
	while(j<LB->length)
	{
		LC->elem[k++]=LB->elem[j++];
		k++,j++;
	}
	LC->length=LA->length+LB->length;
}

其中关于定义结构体这里出了一点小问题,后来查阅资料后做了总结
在这里插入图片描述
参考资料:https://blog.youkuaiyun.com/qq_41848006/article/details/81321883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值