1.3数据结构起源
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
1.4基本概念和术语
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合(文字数据、图像数据...)
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录(人类中的人)
数据项:一个数据元素可以由若干个数据项组成(姓名、年龄...),不可分割最小单位
数据对象:是性质相同的数据元素的集合,数据的子集(年龄、性别相同)
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
层次关系:数据>数据对象>数据元素>数据项
算法的特性:有穷性,确定性,输入,输出,可行性
算法设计目标:正确性,可读性,健壮性,高效率与低存储
1.5逻辑结构与物理结构
逻辑:集合、线性、树形(一对多)、图形(多对多)
物理:顺序存储(地址连续)、链式存储(地址随机)、索引存储<关键字,地址>、散列存储(通过散列函数计算出节点存储位置,本质还是顺序存储)
____________________________________________________________________________
率辉高分笔记
1、数据类型
(1)结构型:结构体就是系统提供给程序员制作新的数据类型的一种机制,用系统已有的基本数据类型或用户定义的结构型构造成用户需要的复杂数据类型。
例:typedef struct{
int a;
char b;
float c;
}TypeA;
上面语句制造了一个新的数据类型 即为TypeA型
TypeA a; 可认为制作了一个数组 a.a为第一个元素 a.b为第二个元素 a.c为第三个元素
(2)指针型:指针变量装的是变量的地址,通过它可以找到变量在内存中的位置
int *a=b; a即为一个指针变量 *a就是取变量b的内容(int x=*a等价于 int x=b)
&b就是取变b的地址 语句a=&b就是把b的地址存于a中 即为指针a指向变量b
链表节点的构造定义:
typedef struct Node
{
int data;
struct Node *next;//指向Node型变量的指针
}Node;
二叉树节点构造定义
typedef struct BTNode
{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
申请新节点(以二叉树为例)
BTNode BT;
BT = (BTNode *)malloc(sizeof(BTNode));//申请一个节点
int *p;
p = (int *)malloc(n * sizeof(int));//申请int型动态数组
——————————————————————————————————————
2、关于引用型形参
int a=0;
void f(int x)
{
++x;
}
输出f(a);的结果为0 因为函数的执行并没有改变a,而是改变了被a赋值的x
void f2(int &x)
{
++x;
}
输出f2(a);的结果为1 即为引用型形参 若传入的变量为指针型 则加上* 例 int *&x
若传入参数为二维数组 则定义时第二维大小不能省略 即 void f(int x[][size])
___________________________________________________________________
代码
例1 将数组R循环左移p个位置 输出{Xp,Xp+1,......Xn,X0,......Xp-1}
void Reverse(int R[], int l, int r)
{
int i,j;
int temp;
for(i=l,j=r;i<j;++i,--j){
temp = R[i];
R[i]=R[j];
R[j]=temp;
}
}
void RCR(int R[],int n, int p)
{
if(p<=0||p>=n){
cout<<"ERROR"<<endl;
}
else{
Reverse(R, 0, p-1);
Reverse(R, p, n-1);
Reverse(R, 0, n-1);
}
}