一、查找
查找代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef char name;
typedef int core;
#define NUM 3
#define NAME_SIZE 40
typedef struct student
{
name names[NUM][NAME_SIZE];
core cores[NUM];
int index[NUM + 1];
}student;
int Aq_search(student *s, int key)
{
int i = NUM + 1;
(*s).index[0] = key;
while ((*s).index[i] != key)
{
i--;
}
return i;
}
void LoadInfo(student *s)
{
int i, j, n;
char c;
for ( i = 0; i < NUM; i++)
{
printf("请输入第%d个学生信息\t", i);
printf("姓名: ");
for ( j = 0; j < NAME_SIZE; j++)
{
scanf("%c", &c);
if (c == ' ')
break;
(*s).names[i][j] = c;
}
printf("---\n成绩: ");
scanf("%d", &n);
(*s).cores[i] = n;
(*s).index[i] = i + 1;
printf("\n");
}
}
void PrintInfo(student *s)
{
int i;
for ( i = 0; i < NUM; i++)
{
printf("姓名: %s|成绩: %d\n", (*s).names[i], (*s).cores[i]);
printf("------------------------------------------------\n");
}
}
int main()
{
student S;
int t;
LoadInfo(&S);
PrintInfo(&S);
t = Aq_search(&S, 2);
printf("name: %s code: %d", S.names[t], S.cores[t]);
return 0;
}
// 比例查找
// 斐波那契查找
二、拓扑排序
三、关键路径
四、AOV与AOE
AOV
AOE
五、索引
六、二叉树排序
代码:
#include "stdio.h"
#include "stdlib.h"
#define FALSE 0
#define TURE 1
typedef int ElemType;
typedef int Status;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
// 递归查找二叉树T中是否存在key
// 指针f指向T的双亲,初值为NULL
// 若查找成功,则指针p指向该元素结点,并返回True
// 否则p指向最后一个结点返回False
Status SearchBST(BiTree T, int key, BiTree f, BiTree *p)
{
if (!T)
{
*p = T;
return FALSE;
}
else if (key == T->data)
{
*p = T;
return TURE;
}
else if (key < T->data)
{
return SearchBST(T->lchild, key, T, p);
}
else
{
return SearchBST(T->rchild, key, T, p);
}
}
// 当二叉树T中不存在关键自字等于key的数据元素时
// 插入key并返回TEUE,否则返回FALSE
Status InsertBST(BiTree *T, int key)
{
BiTree p, s;
if (!SearchBST(*T, key, NULL, &p)) // 先找一下有没有
{
s = (BiTree)malloc(sizeof(BiTree));
s->data = key;
s->lchild = s->rchild = NULL;
if (!p)
{
*T = s; // 插入s作为新的根节点
}
else if (key < p->data)
{
p->lchild = s; // 插入s为左孩子
}
else
{
p->rchild = s;
}
return TURE;
}
else{
return FALSE;
}
}
Status Delete(BiTree *p)
{
BiTree q, s;
if ((*p)->rchild == NULL)
{
q = *p;
*p = (*p)->lchild;
free(q);
}
else if ((*p)->lchild == NULL)
{
q = *p;
*p = (*p)->rchild;
free(q);
}
else
{
q = *p;
s = (*p)->lchild;
while (s->rchild)
{
q = s;
s = s->rchild;
}
(*p)->data = s->data;
if (q != *p)
{
q->rchild = s->lchild;
}
else
{
q->lchild = s->lchild;
}
free(s);
}
}
// 删除操作
Status DeleteBST(BiTree *T, int key)
{
if(!*T)
{
return FALSE;
}
else
{
if (key == (*T)->data)
{
return Delete(T);
}
else if (key < (*T)->data)
{
return DeleteBST((*T)->lchild, key);
}
else
{
return DeleteBST((*T)->rchild, key);
}
}
}