数据结构 算法、线性表、顺序表

一、算法

     1、算法

               算法是解决特定问题的步骤的描述。
               在计算机中算法是一个有穷(或语句、指令)的有序集合。
               它确定了解决某一个问题的一个运算序列。对于问题的初始输入,通过算法有限步的运行,产生一个或多个输出。

     2、算法与程序

算法是解决问题的思想方法;
程序是计算机语言的具体实现;
共同点:它们的语言不能有二义性

区别:算法不依赖计算机语言,程序则必须依赖计算机语言实现

           算法是有穷的,程序可以是无穷的;

           算法可以忽略语法的细节,程序必须严格遵守它所对应的计算机语言的语法;

     3、算法与数据结构

算法设计:取决于选定的逻辑结构
算法实现:依赖于采用的存储结构

数据结构 + 算法 = 程序

      4、算法的特性

有穷性、确定性、可行性、输入(不一定有输入)、输出(一定有一个或多个输出)

      5、算法好坏的判定

(1)正确性:能否正确的解决问题(最基本的一点)
(2)效率方面:消耗时间的多少、消耗存储空间的多少
(3)编程方面:算法的结构要好,要易于理解、编码和调试

      6、算法效率的度量——>时间复杂度

程序运行消耗的时间取决于:

 (1)算法的设计;
 (2)算法的输入规模;
 (3)编译器对代码的优化;
 (4)计算机执行指令的速度;

方法:

  事后统计法

缺陷:依赖于特定的计算机软件与硬件, 需要花费大量精力设计测试程序和测试数据
  事前估计法
  根据算法中语句执行的最大次数(频度)来估算一个算法执行时间的数量级。

时间复杂度T(n)

  算法中基本操作重复执行的次数是问题规模n的某个函数f(n)
  T(n)=O(f(n))
  它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。

      7、算法复杂度的计算方法

计算T(n)的方法:
根据语句频度,写出表达式;
常数部分变为1;
只保留最高阶项目,其余的项舍去;
如果最高项有乘数且不为1,表达式除于最高阶相乘的数;

     8、算法空间复杂度

算法空间复杂度就是计算方法所需要的存储空间的大小。

S(n)=O(f(n))

 二、线性表

1、线性表

线性表就是零个或多个相同数据元素的有限序列。

2、表示方法

L=(D,R)
D为所包含的元素集合
R为元素关系集合

3、线性表的基本运算

(1)建立一个空表:CreateList(L);
(2)置空表:ClearList(L);
(3)判断表是否为空:EmptyList(L)
若为空,返回值为True(或1),否则返回False(或0);
(4)求表长:Length(L);
(5)取表中某个元素:GetList(L,i),即ai,要求0<=i<=length(L)-1;
(6)定位运算:Locate(L,x).确定元素X在表L中的位置(或序号);
(7)插入:Insert(L,x,i).将元素X插入到表L中第i个元素ai之前,且表长+1;
(8)删除:Delete(L,i).删除表L中第i个元素ai,且表长减1,要求0<=i<=n-1;
1-8为基本运算,此外,对线性表的运算还有:合并、拆分、复制、排序和遍历等。

三、顺序表

1、线性表存储映像

顺序映像、链式映像

2、为了明确区分顺序表里的元素个数

定义变量:last  1)有效数值的个数
2)最后一个有效元素的下标

3、顺序表的C语言实现顺序映像

	#define N 100
	typedef int data_t;
	typedef struct {
		data_t data[N];
		int last;
	}sqlist_t,*sqlink_t;

4、顺序表——删除元素

删除:将表中第i个元素ai从表中删除,即实现DeleSqlist(L,i).
思路:若参数i满足:0<=i<=L->last,将表中L->data[i+1]到L->data[L->last]部分顺序向上移动一个位置,覆盖L->data[i].

5、顺序表——定位

定位:确定给定元素X在表中第一次出现的位置(或序号)。即实现Locate(L,x)。
思路:设一扫描变量i(初值为0),判断当前表中元素ai是否等于x,若相等,则返回当前i值(表明x落在表的第i个位置);否则i加1,继续下去。若表中无一个元素与x相等,则返回-1.






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值