顺序表的插入

前面讲了关于顺序表的查找,这篇文章将讨论顺序表的插入与删除

首先来看看插入操作,
在第i个位置插入一个新元素,使长度为n的线性表变为长度为n+1的线性表
我们在前一篇文章结尾谈到插入与删除需要移动大量的元素,其实就是移动原表的一些位置的结点(在顺序表的末尾插入无须移动结点,直接插入即可)
例:已知顺序表(1,2,3,4,5)需在第4个元素之前插入一个元素6,则需将第5个位置到第4个位置依次往后移动一个位置,然后将元素6插入到第4个位置

以下为操作示意图

移动之前的顺序表

移动过后的顺序表

插入元素6之后

接下来是我写的插入元素的函数

void inslist(seqlist *l,int number,int land)
{
	//先判断 插入的位置是否合法,这里的land表示的是第几个位置而不是下标 
	if(land>l->last+2||land<1)//这里l->last+2的原因是last是从-1开始取的
	{
		printf("插入的位置不合法\n");
		return;
	}
	//然后判断表是否已经满了
	if(l->last>MAXSIZE-1)
	{
		printf("表格已经满了,无法插入\n");
		return;
	}
	//然后进行移动
	for(int i=l->last;i>=land-1;i--)
	{
		l->elem[i+1]=l->elem[i];
	}
	l->last++;
	//完成后就把元素6插入
	l->elem[land-1]=number; 
}

主函数

int main()
{
	int j;
    seqlist *l;
    l=&n;
	int data;
	for(j=0;j<5;j++)
	{
		printf("输入第%d个初始数据:",j+1);
		scanf("%d",&data);
		l->elem[j]=data;
	}
	l->last=j-1;
	int number;
	int land;
	printf("输入你要插入的数字\n");
	scanf("%d",&number);
	printf("输入你要插入的位置\n");
	scanf("%d",&land);
	inslist(l,number,land);
	printlist(l); 
}

下面是整体的代码

#include <stdio.h>
#define MAXSIZE 10
struct seqlist 
{
	int elem[MAXSIZE];//这里我们拿整型数组来作示范
	int last;//last用来记录表中最后一个元素的下标值,注意是下标值,所以我们初始化的时候last从-1开始取 
}n;
void inslist(seqlist *l,int number,int land)
{
	//先判断 插入的位置是否合法,这里的land表示的是第几个位置而不是下标 
	if(land>l->last+2||land<1)//这里l->last+2的原因是last是从-1开始取的
	{
		printf("插入的位置不合法\n");
		return;
	}
	//然后判断表是否已经满了
	if(l->last>MAXSIZE-1)
	{
		printf("表格已经满了,无法插入\n");
		return;
	}
	//然后进行移动
	for(int i=l->last;i>=land-1;i--)
	{
		l->elem[i+1]=l->elem[i];
	}
	l->last++;
	//完成后就把元素6插入
	l->elem[land-1]=number; 
}
//此处为打印函数是用来检验的 
void printlist(seqlist *l)
{
	for(int i=0;i<=l->last;i++)
	{
		printf("第%d个元素为%d\n",i+1,l->elem[i]);
	}
}
int main()
{
	int j;
    seqlist *l;
    l=&n;
	int data;
	for(j=0;j<5;j++)
	{
		printf("输入第%d个初始数据:",j+1);
		scanf("%d",&data);
		l->elem[j]=data;
	}
	l->last=j-1;
	int number;
	int land;
	printf("输入你要插入的数字\n");
	scanf("%d",&number);
	printf("输入你要插入的位置\n");
	scanf("%d",&land);
	inslist(l,number,land);
	printlist(l); 
}

 接着我们来运行一下,输入初始数据1,2,3,4,5

然后我们插入6这个元素,插入到第4个位置,然后用来检验的printlist函数就把插入之后的表的内容全部打印出来了

 

 

 

 

 

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值