栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构与算法,c语言实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构与算法,c语言实现

代码:数据结构与算法代码,c语言实现-算法与数据结构文档类资源-CSDN下载

部分代码:

#ifndef __BINQUEUE_H__
#define __BINQUEUE_H__
#define CONFIG
#include "../Config.h"
#define MaxTrees (16)
#define Infinity (65535)
#define Capacity (65535)

typedef struct bin_node
{
    ElementType Element;
    Position LeftChild;
    Position NextSibling;
} BinNode;
typedef BinNode *BinTree;
typedef BinNode *Position;

typedef struct collection
{
    int CurrentSize;
    BinTree TheTrees[MaxTrees];
} Collection;
typedef Collection *BinQueue;

BinQueue Initialize(void);
int IsEmpty(BinQueue H);
BinQueue Merge(BinQueue H1, BinQueue H2);
BinQueue Insert(ElementType X, BinQueue H);
ElementType DeleteMin(BinQueue H);

#endif
//删除并返回二项队列中最小元素
ElementType DeleteMin(BinQueue H)
{
    int i, j;
    int MinTree;
    BinQueue DeletedQueue;
    Position DeletedTree, OldRoot;
    ElementType MinItem;

    if (IsEmpty(H))
    {
        Error("Empty binomial queue");
        return -Infinity;
    }

    MinItem = Infinity;
    for (i = 0; i < MaxTrees; i++)
    {
        if (H->TheTrees[i] && H->TheTrees[i]->Element < MinItem)
        {
            MinItem = H->TheTrees[i]->Element;
            MinTree = i;
        }
    }

    DeletedTree = H->TheTrees[MinTree];
    OldRoot = DeletedTree;
    DeletedTree = DeletedTree->LeftChild;
    free(OldRoot);

    DeletedQueue = Initialize();
    DeletedQueue->CurrentSize = (1 << MinTree) - 1;
    for (j = MinTree - 1; j >= 0; j--)
    {
        DeletedQueue->TheTrees[j] = DeletedTree;
        DeletedTree = DeletedTree->NextSibling;
        DeletedQueue->TheTrees[j]->NextSibling = NULL;
    }

    H->TheTrees[MinTree] = NULL;
    H->CurrentSize -= DeletedQueue->CurrentSize + 1;

    Merge(H, DeletedQueue);
    return MinItem;
}
//合并部分
void Merge(ElementType A[], ElementType TmpArray[],
           int Lpos, int Rpos, int RightEnd)
{
    int i, LeftEnd, NumElements, TmpPos;

    LeftEnd = Rpos - 1;
    TmpPos = Lpos;
    NumElements = RightEnd - Lpos + 1;

    
    while (Lpos <= LeftEnd && Rpos <= RightEnd)
        if (A[Lpos] <= A[Rpos])
            TmpArray[TmpPos++] = A[Lpos++];
        else
            TmpArray[TmpPos++] = A[Rpos++];

    while (Lpos <= LeftEnd) 
        TmpArray[TmpPos++] = A[Lpos++];
    while (Lpos <= LeftEnd) 
        TmpArray[TmpPos++] = A[Rpos++];

    
    for (i = 0; i < NumElements; i++, RightEnd--)
        A[RightEnd] = TmpArray[RightEnd];
}
//递归部分
void MSort(ElementType A[], ElementType TmpArray[],
           int Left, int Right)
{
    int Center;

    if (Left < Right)
    {
        Center = (Left + Right) / 2;
        MSort(A, TmpArray, Left, Center);
        MSort(A, TmpArray, Center + 1, Right);
        Merge(A, TmpArray, Left, Center + 1, Right);
    }
}
//归并排序
void MergeSort(ElementType A[], int N)
{
    ElementType *TmpArray;

    if ((TmpArray = (ElementType *)malloc(N * sizeof(ElementType))) == NULL)
        FatalError("Out of space!!!");
    MSort(A, TmpArray, 0, N - 1);
    free(TmpArray);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号