数据结构(c语言) 导论

一、数据结构简介

  • 数据结构是数据与算法的研究。数据结构包含算法、数据存储结构、排序、搜索、程序设计概念和哈希函数。

1、数据与信息

  • 数据:未经处理的原始文字、数字、符号或图形等。表达出的只是一种没有评估价值的基本元素或项目。
  • 信息:经过处理后的数据。

2、算法

  • 数据结构+算法=可执行程序

3、算法的条件

  • 输入:0个或多个数据,这些输入必须有清楚的描述或定义
  • 输出:至少会有一个输出结果,不可以没有输出结果。
  • 明确性:每一个指令或步骤必须是简洁明确的。
  • 有限性:在有限步骤后一定会结束,不会产生无限循环
  • 有效性:步骤清楚且可行,能让用户用纸笔计算求出答案。

4、数据结构的应用

  • 树状结构:非线性结构,如二叉树。
  • 最短路径:全球定位系统
  • 搜索理论:搜索引擎

二、数据抽象化

1、基本数据类型

  • 整数(int)、浮点数(float)、双精度浮点数(double)、字符(char)

2、抽象数据类型

  • 将现实世界的实体或概念转化为数据结构类型来表示,以达到隐藏内部细节,只展现外观的目的。抽象数据类型是一种自定义的数据类型。
  • 堆栈或队列是很典型的抽象数据类型。

三、算法与程序设计

1、程序设计

  • 由合乎程序设计语言的语法规则的指令所组成的。

2、程序开发流程

  • 评价程序好坏四个方面:可读性高,平均成本低,可靠度高,可编写性高
  • 程序开发流程:需求-设计规划-分析讨论-编写程序-测试检验

3、程序设计风格

  • 自顶向下与模块化设计
  • 可读性设计:适当使用注释,将代码中的标识符或名称定义具体有意义
  • 控制结构设计:顺序结构(自顶向下)、选择结构(if)、重复结构(for循环)

四、面向对象程序设计

  • 属性:对象的静态外观描述
  • 方法:对象中的静态响应方式
  • 事件:对象可以针对外部事件做出的各种响应

1、封装

  • 将代表事物特征的数据隐藏起来,并定义一些方法来作为操作这些数据的接口

2、继承

  • 继承关系中被继承者称为“基类”或“父类”,继承者称为“派生类”或“子类”。
  • 继承允许定义一个新的类来继承现有的类,进而使用或修改继承而来的方法,并可在子类中加入新的数据成员与函数成员。

3、多态

  • 多态最直接的定义就是让具有继承关系的不同类对象,可以调用相同名称的成员函数,并产生不同的相应结果。

五、模块化设计与C语言

1、函数

  • 函数分为标准函数和自定义函数两种。
  • 函数基本上由函数名称、参数、返回值与返回数据类型组成。
语法格式:
返回数据类型 函数名称 (参数行)
{
    程序语句区;
    return 返回值;
}

2、函数调用

有返回值时:函数名称(自变量行)

  • 自变量即函数参数,调用函数时,函数会将自变量的值作为参数值,所以参数和自变量的个数必须对应。

无返回值

  • 函数名称() 或   函数名称(void)

由于c语言是自顶向下的结构,函数在主程序后需要声明函数,格式如下:

  • 返回数据类型 函数名称(参数数据类型行):

3、参数类型介绍

  • 实际参数:调用子程序的参数为实际参数
  • 形式参数:被调用子程序中的参数称为形式参数。

4、参数的传递方式

  • 传值调用:将主程序的参数值,传递给子程序的参数,由于实际参数与形式参数分别占用不同的内存地址,无论子程序的值如何改变,并不会影响主程序的参数值。
  • 传址调用:主程序调用子程序时,将主程序的参数地址传给子程序对应的参数。由于实际参数和形式参数占用相同的内存地址,此时如果改变子程序的参数值,则主程序的参数值也会跟着变动。

六、递归算法

1、定义

递归至少需要定义两种条件

  • 一个是可以反复执行的过程
  • 一个是跳出执行过程的出口

2、分类

  • 直接递归:在递归函数中允许直接调函数本身
  • 间接递归:在递归函数中调用其他递归函数,再从其他递归函数调用回原来的递归函数。
  • 尾递归:程序的最后一条指令为递归调用,及每次调用后,再回到前一次调用后执行的第一条指令就是return。

3、实例

  • n的阶乘
#include<stdio.h>

int factoria(int n);
 
int main(void)
{
	int x; 
	printf("请输入要计算的阶乘数:");
	scanf("%d",&x);
	printf("\n%d!的结果为:%d",x,factoria(x));
		
}

int factoria(int n){
	int sum;
	if(n==0)
		return 1;
	else
		sum=n*factoria(n-1);
		
	return sum; 
}
请输入要输出的阶乘:5
5!的结果为:120
  • 斐波那契数列
#include<stdio.h>

int fib(int n);

int main(void){
	int x;
	printf("请输入要显示的数列项数:");
	scanf("%d",&x);
	for (int i=0;i<=x;i++){
		printf("\nfib(%d)=%d\n",i,fib(i)); 
	}

}

int fib(int n){
	if(n==0)
	return 0;
	else if(n==1)
	return 1;
	else 
		return fib(n-1)+fib(n-2);
	
}
请输入要显示的斐波那契数列:3
fib(0)=1
fib(1)=1
ifb(2)=1
fib(3)=2

七、程序效率的分析

  • 有关于程序所需存储空间的量度,称之为”空间复杂度“
  • 执行一个程序(或算法)所需的时间,除了编译程序的机器码和计算机中的执行速度外,需要考虑时间复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值