数据结构-排序(一)

一、查找
查找代码:

#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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值