第1章 绪论

数据结构包括三方面的内容,即数据的逻辑结构、数据的存储结构和对数据所施加的运算。

1.1 基本术语:

数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型

1.2 数据结构的内容

1.逻辑结构

根据数据元素之间关系的不同特性,通常有下列四种基本结构

(1)集合关系:该结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。

(2)线性结构:该结构中的数据元素之间存在着一对一的线性关系。

(3)树形结构:该结构中的数据元素之间存在着一对多的层次关系。

(4)图状结构或网状结构:该结构中的数据元素之间存在着多对多的任意关系。

数据的四种基本逻辑结构可概括为:

线性结构:线性表,栈,队,字符串,队,字符串,数组,广义表

非线性结构:树,图

2.存储结构

数据结构从存储结构上划分为两种:顺序存储、链式存储

索引存储,散列存储

3.运算集合:增、删、查、改

4.数据结构三方面的关系:

线性表是一种逻辑结构,若采用顺序存储方法,可称其为顺序表;若采用链式存储方法,则可称其为链表;若采用散列存储方法,则可称其为散列表。

若对线性表上的插入、删除运算限制在表的一端进行,则该线性表称之为栈;若将插入运算限制在表的一端进行,而删除运算限制在表的另一端进行,则该线性表称之为队列。

1.3 算法描述:

程序=算法+数据结构

1.3.1基本概念

1.算法的定义算法(algorithm)是规则的有限集合,是为了解决特定问题而规定的一系列操作。

2.算法的特性:有限性、确定性、输入、输出、可行性

3.算法设计的要求:正确性、可读性、健壮性、高效率和低存储量

1.3.2算法描述的工具

流程图、自然语言、其它、计算机语言

1.4 算法分析

1.4.1 时间复杂度

1.语句频度

语句频度是指该语句在一个算法中重复执行的次数,一个算法的时间耗费是该算法中所有语句频度之和。

2.时间复杂度

时间复杂度为

T(n)=O(f(n))

数据结构中常用的时间复杂度频率计数有以下7种。

(1)O(1),表示常数型。

(2)O(n),表示线性型。

(3)O(n2),表示平方型。

(4)O(n3),表示立方型。

(5)O(2n),表示指数型。

(6)O(log2n),表示对数型。

(7)O(nlog2n),表示二维型。

3.最坏时间复杂度

1.4.2 空间复杂度

表示为如下形式。S(n)=O(f(n))

本章小结

1.数据结构研究的是数据的表示形式及数据之间的相互关系。从逻辑结构来看,数据结构包括集合、线性结构、非线性结构等。从存储结构来看,数据结构包括顺序存储、链式存储、索引存储和散列存储四种。

2.集合中不存在数据之间的关系;线性结构的数据元素之间存在着一对一的关系;树型结构的数据元素之间存在着一对多的关系;图型结构的数据元素之间存在着多对多的关系。

3.顺序存储相当于C语言中的一维数组存储;链式存储相当于C语言中的链表存储;索引存储也称为索引查找,包括主表和索引表;散列存储也称为数据查找,是用构造函数的方法得到关键字的地址。

4.算法的评价指标首先是正确性,然后是健壮性、可读性、高效率和低存储量。

5.时间复杂度和空间复杂度通常采用数量级的形式来表示,若一个算法的时间复杂度和空间复杂度越优,则算法的执行效率就越高。

三、编程题

1.将n个数按升序输出,并分析它的时间复杂度。

function orderArray($arr) {
    $count = count($arr);
    $temp = 0;
    // 外层控制排序轮次
    for ($i = 0; $i < $count - 1; $i ++) {
        // 内层控制每轮比较次数
        for ($j = 0; $j < $count - 1 - $i; $j ++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
    return $arr;
}

function orderNumber($a1,$a2,$a3,$a4) {
    $arr = array($a1,$a2,$a3,$a4);
    $rs = orderArray($arr);
    echo '<b>'.$rs[0].$rs[1].$rs[2].$rs[3].'</b>';
}
————————————————
原文链接:https://www.cnblogs.com/zdz8207/p/php-order-number.html

2.求10个数中的最大值,并分析它的时间复杂度。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i,j,MAX=0;
	int arry[10];
	printf("Please input the arry[]:");
	for (i = 0; i < 10; i++)
	{
	   scanf("%d",&arry[i]);
	}
	MAX = arry[0];
	for (j = 1; j < 10; j++)
	{
		if (arry[j]>MAX)
		{
			MAX = arry[j];
		}
	}
	printf("%d\n",MAX);
	system("pause");
	return 0;

}
————————————————
原文链接:https://blog.csdn.net/Python_programer/article/details/85040990

3.求1到10的阶乘之和,并分析它的时间复杂度。

#include<stdio.h>
int main()
{
	double a,b=1,sum=0;
	for(a=1;a<=10;a++)
	{
		b = a*b; /* 原理:1!等于1乘以1,2!等于1!乘以2,3!等于2!乘以3,以此类推 ,10!等于9!乘以10 */ 
		sum = sum+b; /* 依次将1到10的阶乘相加 */ 
	}
	printf("%lf\n",sum);
	return 0;
}
————————————————
原文链接:https://blog.csdn.net/bestGP/article/details/90117013

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值