C 数据结构

一 ,前言 

  数据结构是一门研究计算机的操作对象及其相互之间的关系和运算等的学科,它关系到算法的选择进而影响程序执行的效率。简单来说,就是这样:数据结构+算法=程序,由此,其重要性也就不言而喻了吧。

1,基本概念

数据:能被计算机识别和处理的符号集合,想想计算机能识别什么嘛,没错,各种二进制数,0呀,1呀这些符号(别误会,还有很多图像,数字,声音等都是数据,因为最终都会被转化为二进制数从而被识别)。

数据元素:数据的基本单位,可以被看做某个逻辑整体,比如包含学生姓名,年级,学号等系列的一张学生信息表的这个整体。

数据项:构成数据元素的最小单位,比如姓名,年级...见图一

图一
图一
图二

数据对象:具有相同性质的数据元素的集合,如图二N={姓名,学号,年级,生日,...}所有的学生信息,再来一个例子,学科={语文,数学,英语,物理,化学,生物}

数据结构

其分为逻辑结构和物理结构,逻辑结构又分为集合结构,线性结构,树结构,图结构

  物理结构分为①顺序存储(逻辑上相邻的数据元素存储在物理位置相邻的存储单元中)数组就是这样,a[10]=a[0]+ a[1]+a[2]+a[3]+...其空间分配也相邻。②链式存储(逻辑上相邻的数据元素不要求其存储位置必须相同,用指针来存储。

算法特性:有输入 有输出 有穷性  确定性  有效性

评价:正确性 可读性 健壮性 有效性

2,算法的复杂度

2.1 时间复杂度

  算法所耗的具体时间很难算出,也没有必要上机测试,只需要知道哪个算法花的时间多,哪个算法花的时间少,算法中语句的执行次数多,其花费的时间也就越多,一般情况,算法中基本操作重复执行的次数 是问题规模n个函数,,用T(n)表示。O(f(n))为算法的渐进时间复杂度,f(n)为函数形式。T(n)=O(f(n))。

2.1.1 计算方法

(1)简单的输入输出,赋值语句,近视认为需O(1)时间

(2)求和法则   顺序结构 两个部分的时间复杂度,取大的个

 (3) 选择在结构 如if语句,O(1).

   (4)乘法法则  嵌套循环

 例如:

for(i=1;i<n;i++)
x++;//加法循环n次,因此时间为O(n)

for(i=1;i<n;i++)
for(j=1;j<i;j++)
x++;//i的加法执行1次的同时,j也会执行,即O(n²)

一般的,对n足够大时,常用的复杂度顺序如下:

常见函数增长率

2.2  空间复杂度 

当问题规模n趋近于无穷大时的空间量级称为算法的渐近空间复杂度S(n)=O(f(n))

re(int a[],int n)
{
int i,j,*b;//只看这里,b所占空间n+2个控制变量i,j,所以S(n)=n+2=O(n)
b=(int *)malloc(sizeof(int)*n);
for(i=0,j=n-1;i<n;i++,j++)
b[i]=a[i];
for(i=j=0;i<n;i++,j++)
a[i]=b[i];
free(b);
}

3,线性表

3.1 顺序存储

顺序表(逻辑上相邻的数据元素物理上也相邻的基本操作基本操作

1 静态分配

#include<stdio.h>
#define MaxSize 6
typedef struct {
	int data[MaxSize];
	int length;
}sqlist; 
void InitList(sqlist &L){
	L.length=0;//设置默认值 
}
int main()
{
	sqlist L;
	InitList(L);
	for(int i=0;i<L.length;i++)
	printf("data[%d]=%d\n",i,L.length);
	return 0;
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值