第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数

1、删除指定位置上的数据;

问题及答案:

/*删除指定位置上的数据*/
#include<stdio.h>
#define SIZE 100   //定义一个字符常量
int deletedate(int[],int,int);   //声明一个删除函数
int n=10;  //数组中实际有用的数据
int main()
{
    int a[SIZE]={25,45,36,48,89,57,65,25,26,16};
    int i,locate;
    scanf("%d",&locate);   //删除locate处数据;
	n=deletedate(a,10,locate);    //函数实参:数组名,长度,位置。函数返回长度n;
	for(i=0;i<n;i++)
	 printf("%d\n",a[i]); //输出每一个元素
	 return 0;
 }
 /*
功能:删除数组中指定位置上的元素
入口参数: 数组名、数组大小、要删除元素的位置
返回值:删除后数组的大小
*/
 int deletedate(int arr[],int len,int loc)
 {
 	int i=loc;   //此赋值表示要删除i处值;
	//删除的位置写入其后的值覆盖
    while(i<len-1)  //删除数据后len长度减小
    {
    	arr[i]=arr[i+1]; //后面值覆盖前面值
    	i++;
	}
	len--;  //删除后数组大小减1
	return len;
 }

运行结果:

学习心得:

删除一个位置的数据,其后的每一个数据将覆盖前一个数据;

知识总结:

删除后i循环的次数变小;

删除后数据长度变小;

函数定义时注意考虑具体采用哪些参数,是否有返回值;

2、在指定位置插入一个数据;

问题及代码:

/*在指定位置上插入一个数据*/
#include<stdio.h>
#define SIZE 100   //定义一个字符常量
int inserdate(int[],int,int,int);   //声明一个插入的函数
int n=10;  //数组中实际有用的数据
int main()
{
    int a[SIZE]={25,45,36,48,89,57,65,25,26,16};
    int i,locate,value;
    scanf("%d",&locate);   //插入locate处数据;
	n=inserdate(a,10,locate,value);    //函数实参:数组名,长度,位置。插入值,函数返回长度n;
	for(i=0;i<n;i++)
	 printf("%d\n",a[i]); //输出每一个元素
	 return 0;
 }
 /*
功能:在数组中插入指定位置上的元素
入口参数: 数组名、数组大小、要插入元素的位置和它的值
返回值:插入值后数组的大小
*/
 int inserdate(int arr[],int len,int loc,int val)
 {
 	int i=len;   //给i赋值为数组的长度;
	//将loc后面的数值向后移动;
    while(i>loc)
    {
    	arr[i]=arr[i-1]; //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出;
    	i--;
	}
	//在i==loc处写入数值,即上面腾出的空间;
	arr[i]=val ;
	len++;  //插入后数组大小减1
	return len;
 }

运行结果:

学习心得:

与删除类似,参数入口增加了一个插入的值。

知识总结:

集体后移loc后面的数,即前一个覆盖后一个数,空出插入处的空间;

3、合并连个有序数组;

问题及代码:

/*合并两个有序数组*/
#include<stdio.h>
#define SIZE 100   //定义一个字符常量
int mergedate(int[],int,int[],int,int[]) ; //声明一个合并功能的函数
int n1=10,n2=8,n3=0;  //数组中实际有用的数据
int main()
{
    int a1[SIZE]={25,45,36,48,89,57,65,25,26,16};
    int a2[SIZE]={46,85,77,16,85,48,95,25};
    int a3[SIZE*2];
    int i;
	n3=mergedate(a1,10,a2,8,a3);    //函数实参:两组数组名及长度,新数组名,函数返回新数组长度n3;
	for(i=0;i<n3;i++)
	 printf("%d\n",a3[i]); //输出新数组的每一个元素
	 return 0;
 }
 /*
功能:合并数组a1、a2,将其合到新数组a3;
入口参数: 数组名a1,a2,a3,数组大小n1,n2;
返回值:合并后新数组的大小 ;
*/
 int mergedate(int arr1[],int L1,int arr2[],int L2,int arr3[])
 {
 	int i=0,j=0,k=0;   //初始化三个循环;
	//i与j均从最小值开始取值,将两个数组中的值进行对比,将小得值赋给新数组;
    while(i<L1&&j<L2)
    {
    	if(arr1[i]<arr2[j]) //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出;
			arr3[k++]=arr1[i++];
    	else
        	arr3[k++]=arr1[j++];
	}
	/*上面的对比完之后,两个数组均可能剩下一些元素;
	将某一个数组剩余数赋值给新数组; */
	while(i<L1)
	  arr3[k++]=arr1[i++];
	while(j<L2)
	  arr3[k++]=arr2[j++];
	return k;
 }

运行结果:

学习心得:

合并数组,需要知道两个数组及其长度,求出新数组;

知识总结:

通过对比两个数组的元素选出结果赋值给新数组;

最后剩余的所有元素一起赋值给数组,但这些元素并未进行排序;

时间: 2024-10-07 10:19:29

第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数的相关文章

第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数

[项目1-有序数组中插入数据(函数版)] /* * Copyright (c) 2016, CSDN学院 * All rights reserved. * 文件名称:[项目1-有序数组中插入数据(函数版)].cpp * 作 者:张易安 * 完成日期:2016年 9 月 9 日 * 版 本 号:v1.0 * * 问题描述: 有一个足够"大"的数组a,其中已经存储了n个呈升序排列的数据.调用函数insert(a, n, m), * 可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回

数据结构算法C语言实现(一)---2.3线性表的顺序表示和实现

注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实现,主要操作包括建表,插入元素,删除元素,查找元素,合并表等操作,根据书中伪代码编写了C语言,使用int类型进行了测试,需要注意的是查找元素时使用了函数指针,C语言初学者不易理解,可查阅相关书籍学习. 二.头文件 1 //head.h 2 /** 3 My Code 4 */ 5 #include

数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

一.简述 [暂无] 二.头文件 1 #ifndef _2_3_part1_H_ 2 #define _2_3_part1_H_ 3 //2_3_part1.h 4 /** 5 author:zhaoyu 6 email:[email protected] 7 date:2016-6-4 8 note:realize my textbook <<数据结构(C语言版)>> 9 */ 10 //----线性表的单链表存储结构---- 11 /** 12 My Code 13 to mak

《C语言及程序设计》课程主页

第1章 引言及体验 [课程视频]  [本章示例] 1.1 课程介绍--内容及学习方法 1.2 程序设计语言 自测 1.3 搭建C语言的运行平台 >>>实践:按视频指导搭建编程环境并运行程序 1.4 C语言程序初体验 >>>实践:项目要求  实践参考 1.5 分支结构程序体验 >>>实践:项目要求  实践参考 第2章 数据的表示和运算 [课程视频]  [本章示例] 2.1 数值数据类型及表示 自测 2.2 变量的使用 自测 2.3 标识符及其命名 自测

[JAVA_开课吧资源]第一周 Java语言概述、Java语言基础

主题一 Java语言概述 » JDK介绍及其基本组件 Sun公司利用Java开发工具箱(Java Development Toolkit ,JDK)发布Java的各个版本.JDK由开发和测试Java程序的独立程序集组成,它们都从命令行调用. [请点击查看更多内容 转自51CTO.com] » 使用CMD开发运行Java程序 代码文件的拓展名必须为.java,并且文件名应该与类的类名完全相同.编译一个程序是指使用编译器将源代码翻译成java字节码.下面的命令用来编译源代码文件welcome.jav

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

《七周七语言:理解多种编程范型》のIo课后习题答案

哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了. 本篇习题解答是接着 <七周七语言:理解多种编程范型>のRuby课后习题答案 Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能.因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能. 第一天: 1. 对1+1求值,然后对1+"one&q

《七周七语言》学习笔记——Ruby——第一天:找个保姆

感觉学了东西很快就会忘记,不会留下什么,趁这次看<七周七语言>,把其中觉得有用的东西记录下来,方便以后自己查阅,这篇应该就是记录的开始了. Ruby是一门面向对象的.解释型的.动态类型的脚本语言.面向对象,说明了这门语言具有封装.继承.多态这些特性:解释型,意味着它由解释器而不是编译器来执行:动态类型,即类型是在运行时绑定而非编译时绑定:脚本语言,则说明了它很短!易上手!并且只在调用的时候解释执行. 编程模型:一切皆对象,从一个数到bool值,都被定义为对象,都有自己的方法 判断结构:块形式和

数据结构线性表链表的C语言实现

                                                                                      数据结构线性表链表的C语言实现      说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构.它可以分为顺序表和链表.它的主要操作是数据元素的插入,删除,以及排序等.接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给