第73节 实现线性表基本操作的函数

一.数据结构与其基本操作

1.四类数据结构: ①集合结构 ②线性结构 ③树型结构 ④图型结构

2.基本操作:增加、删除、修改、查找、合并…

3.数组是存储线性结构的一种方案

二.删除指定位置上的数据

#include <stdio.h>
#define SIZE 100 //定义常量用大写
int deleData(int[], int, int);//参数可省略名字
int main()
{
	int n = 10; //数组中实际有用的元素
	int d[SIZE] = { 1,3,9,12,32,41,45,62,75,77 };
	int locate;
	//locate要删除的元素:d[locate],i用于循环计算
	scanf_s("%d", &locate);
	n = deleData(d, n, locate);//调用函数
	for (int i = 0; i < n; ++i)//输出新数组
		printf("%d ", d[i]);
	printf("\n");
	return 0;
}

int deleData(int arr[], int len, int loc)
//功能:删除数组中指定位置上的元素
//参数:数组名/数组大小/要删除元素位置
//返回:删除后素组的大小
{
	while (loc < len - 1) //3<9; loc最大取8;
	{
		arr[loc] = arr[loc + 1];
		++loc;
	}
	return --len;//删除后,数组长度减1
}
运行结果:
3
1 3 9 32 41 45 62 75 77

三.在指定位置插入值

#include <stdio.h>
#define SIZE 100 //定义常量用大写
int insertData(int[], int, int, int);
//声明插入函数,参数可省略名字
int main()
{
	int n = 10; //数组中实际有用的元素
	int d[SIZE] = { 1,3,9,12,32,41,45,62,75,77 };
	int locate;//locate要插入的元素:d[locate]
	int value;//在locate位置处插入value值
	scanf_s("%d %d", &locate, &value);
	n = insertData(d, n, locate, value);//调用函数
	for (int i = 0; i < n; ++i)//输出新数组
		printf("%d ", d[i]);
	printf("\n");
	return 0;
}

int insertData(int arr[], int len, int loc, int val)
//功能:在长度为len的数组arr的loc位置处插入val
//参数:数组名/数组长度/插入位置/插入的值
//返回:插入数据后的长度
{
	int i = len;
	while (len > loc) //10>3; loc最大取9
	{
		arr[len] = arr[len - 1];
		--len;
	}
	arr[loc] = val;
	return ++i;//插入后,数组长度加1;++len不对;
}
运行结果:
2 8
1 3 8 9 12 32 41 45 62 75 77

四.合并两个有序数组

#include <stdio.h>
int mergeData(int[], int, int[], int, int[]);
#define SIZE 100
int main()
{
	int n1 = 10, n2 = 7, n3 = 0; //数组中的实际有用元素
	int d1[SIZE] = { 1,3,9,12,32,41,45,62,75,77 };
	int d2[SIZE] = { 2,11,24,56,76,82,94 };
	int d3[SIZE * 2]; 
	n3 = mergeData(d1, n1, d2, n2, d3);
	for (int i = 0; i < n3; ++i)
		printf("%d ", d3[i]);
	printf("\n");
	return 0;
}

int mergeData(int d1[], int n1, int d2[], int n2, int d3[])
{
	int i = 0, j = 0, k = 0;
	while (i < n1 && j < n2)
	{
		if (d1[i] < d2[j])
			d3[k++] = d1[i++];
		else
			d3[k++] = d2[j++];
	}
	while (i < n1)
		d3[k++] = d1[i++];
	while (i < n2)
		d3[k++] = d2[j++];
	return k;
}
运行结果:
1 2 3 9 11 12 24 32 41 45 56 62 75 76 77
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值