数据结构——概述
一、数据结构概述
1.定义:是相互之间存在一种或者多种特定关系的数据元素的集合。
2.分类
(1)集合:数据在结构上只是同属同一个集合的关系,没有其他结构关系。
(2)线性结构:元素之间存在一对一的关系。例如数组、链表等、
(3)树形结构:元素之间存在一对多的关系。
(4)图状结构或网状结构:元素之间存在多对多的关系。
以上是根据数据元素之间的逻辑关系进行分类,因此可以说是数据之间的逻辑结构。如果按照元素在计算机中的表示成为数据的物理结构,可以分为顺序存储结构和链式存储结构。其中,顺序存储结构的元素其在计算机的内存上是连续存储的,反之,则为链式存储结构。
二、算法概述
1.特性
(1)有穷性——在有限的时间内完成。
(2)确定性——不会产生歧义,每次运行相同的输入必须得到相同的结果。
(3)可行性——可以通过基本运算有限次数实现。
(4)输入——一个算法可以零个或多个输入。
(5)输出——一个算法有一个或多个输出。
2.算法效率
时间复杂度和空间复杂度
时间复杂度:常量阶<对数阶<线性阶<平方阶<指数阶
示例:将A数组和B数组的元素合并为一个C数组(A、B数组中共有的数字不重复合并)。
时间复杂度为O(n*n)。
#include<stdio.h>
#include<string.h>
int A[5] = {1,3,4,6,8};
int B[6] = {3,5,2,6,7,3};
/****将A和B的元素合并到数组C中****/
void main()
{
int Length_A = sizeof(A) / sizeof(A[0]);
int Length_B = sizeof(B)/ sizeof(B[0]);
int i,j,n,m = 0;
int C[20];
memcpy(C,A,5*sizeof(int));
for(j=0;j<Length_B;j++)
{
n = 0;
for(i = 0; i < Length_A; i++)
{
if(B[j] == A[i])
{
n++; //标记A和B中均有的元素个数
}
}
if(0 == n)
{
m++; //标记新增元素的个数
*(C + Length_A-1+m)=B[j];
}
}
for(i = 0; i < Length_A + m; i++)
{
printf("%d,",*(C+i)); //{1,3,4,6,8,5,2,7,}
}
getchar();
}
该文章只是用来监督自己学习,有不对的地方欢迎指正批评