一.引子
#include<iostream>
using namespace std;
typedef int ElmentType;
typedef struct Tbl* TB;
typedef struct Tbl {ElmentType Array[100];int size = 0;
};
int sortTbl(TB t, ElmentType k) {int i;t->Array[0] = k;for (i = t->size; k != t->Array[i]; i--);return i;}
int main()
{//test01();TB t = new Tbl();for (int i = 1; i <= 10; i++){t->Array[i] = i;t->size++;}int num;cin >> num;int index = sortTbl(t, num);if (index){cout << t->Array[index] << endl;;}else {cout << "未查找到" << endl;}system("pause");return 0;
}
二分查找必须进行排序
#include<iostream>
using namespace std;
typedef int ElmentType;
typedef struct Tbl* TB;
typedef struct Tbl {ElmentType Array[100];int size = 0;
};
int sortTbl(TB t, ElmentType k) {int i;t->Array[0] = k;for (i = t->size; k != t->Array[i]; i--);return i;}
int BS(TB t, ElmentType k) {int left, right, mid;left = 1;right = t->size;while (left <= right) {mid = (left + right) / 2;if (k <t->Array[ mid])right = mid - 1;else if (k > t->Array[mid])left = mid + 1;elsereturn mid;}return -1;
}
int main()
{//test01();TB t = new Tbl();for (int i = 1; i <= 10; i++) {t->Array[i] = i;t->size++;}int num;cin >> num;int ans = BS(t, num);if (ans != -1) {cout << t->Array[ans] << endl;}else {cout << "未找到" << endl;}system("pause");return 0;
}
平均成功查找次数ASL
二.树的定义
树是n个结点构成的有限集合,集合没有元素称为空树
一颗N个结点的树有N-1条边,因为每个结点都有往上的一条边只有跟结点没有
树是保证结点连通的最小的边最少的连接方式
结点的度:结点连接到下面的边,边的个数称为结点的度,就是子树的个数
叶节点:没有子树的结点
父节点:一个结点上面的一个结点
兄弟结点:两个结点具有相同的父节点
路径:一个结点到另一个结点的路径,它是一个结点的序列
路径长度:路径上边的个数
三.树的表示
全都的设计成为A一样的结构,处理数据方便但是浪费空间
二叉树是度为二的树,搞清楚了二叉树就搞清楚了一般树的问题