算法
定义:
对特定问题求解步骤的描述
特性:
有穷
确定
可行
输入
输出
时间复杂度
定义:
算法中所有语句的频度(执行次数)之和
记为:T(n)=O(f(n))
其中,n是问题的规模,f(n)是问题规模n的某个函数。
常见时间复杂度
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n*n)<O(n*n*n)<O(pow(2,n))<O(n!)
最高阶数越小说明算法性能功能越好
时间复杂度忽略高阶项系数和低阶项
空间复杂度
定义
算法运行过程中所使用的辅助空间的大小
线性表
线性表的顺序表示原理解析
定义
相同类型,有序集合,个数有限
优点
可以随机存取
存储密度高
缺点
插入删除需要移动大量元素(从最后开始挨个移动)
难以确定存储空间的容量
存储分配需要一段连续的分配空间
线性表的初始化及插入操作实战
#include<stdio.h>
#include<String.h>
#define MaxSize 50
typedef int ElemType; //让顺序表存储其他元素类型时,可以快速完成代码修改
//静态分配
typedef struct{
ElemType data[MaxSize];
int length; //顺序表长度
}SqList;
bool ListInsert(SqList &L,int i,ElemType element)
{
//判断插入位置是否合法,不合法
if(i<1 ||i>L.length+1){
return false;
}
//如果存储空间满了,不能插入
if(L.length==MaxSize){
return false;
}
//把后面的元素依次向后移动
for (int j =L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=element;//放出插入的元素
L.length++;//顺序表长度要加一
return true;//插入成功
}
void PrintList(SqList L)
{
int i;
for (i=0;i<L.length;i++){
printf("%3d",L.data[i]);
}
printf("\n");
}
int main(){
SqList L; //定义顺序表,变量L
bool ret; //ret用来装返回值
ElemType del;
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.length = 3;
ret =ListInsert(L,2,60);
if (ret)
{
printf("success\n");
PrintList(L);
}else{
printf("failed\n");
}
return 0;
}