亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? btree.c

?? 該文件夾中包含了大部分經典的算法的源程序代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

/* 刪除數據函數 */
void delete_f(void)
{
    int del_id, position;  /* position記錄刪除數據在節點中的位置 */
    char ans;
    Node_type *node;
    puts("\n  ---- DELETE ----");
    printf("  Please enter ID number: ");
    scanf("%d", &del_id);
    node = search(del_id, root, &position);
    if(node != NULL)
    {
        printf("  Are you sure? (Y/N): ");
        ans = getche();
        printf("\n");
        ans = toupper(ans);
        if(ans == 'Y')
            root = removing(del_id, root);
    }
    else
        puts("  ID number not found!!");
}

/* 將數據從B-tree中刪除,若刪除后節點內數據筆數為0,則一并刪除該節點 */
Node_type *removing(int del_id, Node_type *node)
{
    Node_type *p;
    if(!deldata(del_id, node));
    else
        if(node->count == 0)
    	{
            p = node;
            node = node->link[0];
            free(p);
    	}
    return node;
}

/* 將數據從B-tree中移除,若刪除失敗則傳回0,否則傳回數據在節點中所在位置 */
int deldata(int del_id, Node_type *p)
{
    int k;
    int found;
    if(p == NULL)
        return 0;
    else
    {
        if((found = searchnode(del_id, p, &k)) != 0)
    	{
            if(p->link[k-1])
    		{
            replace(p, k);
            if(!(found = deldata(p->id[k], p->link[k])))
                printf("  Key not found");
    		}
        	else
            move(p,k);
    	}
        else
            found = deldata(del_id, p->link[k]);
        if(p->link[k] != NULL)
    	{
            if(p->link[k]->count < MIN)
            restore(p, k);
    	}
        return found;
    }
}

/* 將節點中的數據從k的位置逐一左移 */
void move(Node_type *p, int k)
{
    int i;
    for(i = k+1; i <= p->count; i++)
    {
        p->id[i-1] = p->id[i];
        strcpy(p->name[i-1], p->name[i]);
        p->score[i-1] = p->score[i];
        p->link[i-1] = p->link[i];
    }
    p->count--;
}

/* 尋找刪除非葉時的替代數據 */
void replace(Node_type *p, int k)
{
    Node_type *q;
    for(q = p->link[k]; q->link[0]; q = q->link[0]);
    p->id[k] = q->id[1];
    strcpy(p->name[k], q->name[1]);
    p->score[k] = q->score[1];
}

/* 數據刪除后,重新調整為B-tree */
void restore(Node_type *p, int k)
{
    if(k == 0)   /* 刪除數據為節點中的第一筆數據 */
    {
        if(p->link[1]->count > MIN)
            getright(p, 1);
        else
            combine(p, 1);
    }
    else
        if(k == p->count)  /* 刪除數據為節點中的最后一筆數據 */
    	{
            if(p->link[k-1]->count > MIN)
                getleft(p, k);
        	else
                combine(p, k);
    	}
        else  /* 刪除數據為節點中其它位置的數據 */
            if(p->link[k-1]->count > MIN)
                getleft(p, k);
        	else
                if(p->link[k+1]->count > MIN)
                    getright(p, k+1);
        		else
                    combine(p, k);
}

/* 向左兄弟節點借數據時,做數據右移的動作 */
void getleft(Node_type *p, int k)
{
    int c;
    Node_type *t;
    t = p->link[k];
    for(c = t->count; c > 0; c--)
    {
        t->id[c+1] = t->id[c];
        strcpy(t->name[c+1], t->name[c]);
        t->score[c+1] = t->score[c];
        t->link[c+1] = t->link[c];
    }
    t->link[1] = t->link[0];
    t->count++;
    t->id[1] = p->id[k];
    strcpy(t->name[1], p->name[k]);
    t->score[1] = p->score[k];
    t = p->link[k-1];
    p->id[k] = t->id[t->count];
    strcpy(p->name[k], t->name[t->count]);
    p->score[k] = t->score[t->count];
    p->link[k]->link[0] = t->link[t->count];
    t->count--;
}

/* 向右兄弟節點借數據時,做左移的動作 */
void getright(Node_type *p, int k)
{
    int c;
    Node_type *t;
    t = p->link[k-1];
    t->count++;
    t->id[t->count] = p->id[k];
    strcpy(t->name[t->count], p->name[k]);
    t->score[t->count] = p->score[k];
    t->link[t->count] = p->link[k]->link[0];
    t = p->link[k];
    p->id[k] = t->id[1];
    strcpy(p->name[k], t->name[1]);
    p->score[k] = t->score[1];
    t->link[0] = t->link[1];
    t->count--;
    for(c = 1; c <= t->count; c++)
    {
        t->id[c] = t->id[c+1];
        strcpy(t->name[c], t->name[c+1]);
        t->score[c] = t->score[c+1];
        t->link[c] = t->link[c+1];
    }
}

/* 將三個節點中的數據合并至一個節點中 */
void combine(Node_type *p, int k)
{
    int c;
    Node_type *l, *q;
    q = p->link[k];
    l = p->link[k-1];
    l->count++;
    l->id[l->count] = p->id[k];
    strcpy(l->name[l->count], p->name[k]);
    l->score[l->count] = p->score[k];
    l->link[l->count] = q->link[0];
    for(c = 1; c <= q->count; c++)
    {
        l->count++;
        l->id[l->count] = q->id[c];
        strcpy(l->name[l->count], q->name[c]);
        l->score[l->count] = q->score[c];
        l->link[l->count] = q->link[c];
    }
    for(c = k; c < p->count; c++)
    {
        p->id[c] = p->id[c+1];
        strcpy(p->name[c], p->name[c+1]);
        p->score[c] = p->score[c+1];
        p->link[c] = p->link[c+1];
    }
    p->count--;
    free(q);
}

/* 數據輸出函數 */
void list_f(void)
{
    puts("\n  ---- LIST ----");
    puts("  *******************************");
    puts("      ID     NAME       SCORE");
    puts("   =============================");
    show(root);
    puts("  *******************************");
}

/* 以遞歸方式輸出節點數據,輸出數據采中序法,nd為欲輸出數據的節點 */
void show(Node_type *nd)
{
    if(nd != NULL)
    {
        if(nd->count > 0)
    	{
            if(nd->count == 1)
    		{
                show(nd->link[0]);
                printf("      %-6d %-10s %4d\n",
                    nd->id[1], nd->name[1], nd->score[1]);
                show(nd->link[1]);
    		}
        	else
            if(nd->count == 2)
    		{
                show(nd->link[0]);
                printf("      %-6d %-10s %4d\n",
                        nd->id[1], nd->name[1], nd->score[1]);
                show(nd->link[1]);
                printf("      %-6d %-10s %4d\n",
                        nd->id[2], nd->name[2], nd->score[2]);
                show(nd->link[2]);
    		}
    	}
    }
}

/* 查詢某一特定數據 */
void query_f(void)
{
    int query_id, position;
    Node_type *quenode;
    puts("\n  ---- QUERY ----");
    printf("  Please enter ID number: ");
    scanf("%d", &query_id);
    quenode = search(query_id, root, &position);
    if(quenode != NULL)
    {
        printf("  ID number: %d\n", quenode->id[position]);
        printf("  Name: %s\n", quenode->name[position]);
        printf("  Score: %d\n", quenode->score[position]);
    }
    else
        puts("  ID number not found!!");
}

/* 將B-tree中的數據儲存到文件中 */
void save(Node_type *node, FILE *outfile)
{
    if(node->count != 0)
    {
        if(node->count == 1)
    	{
            save(node->link[0], outfile);
            fprintf(outfile, "  %6d %10s %4d\n", node->id[1], node->name[1],
                  node->score[1]);
            save(node->link[1], outfile);
    	}
        else
        if(node->count == 2)
    	{
            save(node->link[0], outfile);
            fprintf(outfile, "  %6d %10s %4d\n", node->id[1], node->name[1],
                node->score[1]);
            save(node->link[1], outfile);
            fprintf(outfile, "  %6d %10s %4d\n", node->id[2], node->name[2],
                node->score[2]);
            save(node->link[2], outfile);
    	}
    }
}

/* 結束本系統 */
void quit(void)
{
    printf("\n  Thanks for using, bye bye!!");
    exit(0);
}

/* 查找某一鍵值所在節點,target為查找鍵值,傳回值為target所在節點指針,若沒有找
   到則傳回NULL */
Node_type *search(int target, Node_type *node, int *targetpos)
{
    if(node == NULL)
        return NULL;
    else
        if(searchnode(target, node, targetpos))
            return node;
        else
            return search(target, node->link[*targetpos], targetpos);
}

/* 查找某一鍵值在節點中的位置,target為查找鍵值,k記錄鍵值所在位置,傳回0表
   示查找失敗,傳回1表示查找成功 */

int searchnode(int target, Node_type *p, int *k)
{
    if(target < p->id[1])
    {
        *k = 0;
        return 0;
    }
    else
    {
        *k = p->count;
        while((target < p->id[*k]) && *k > 1)
            (*k)--;
        if(target == p->id[*k])
            return 1;
        else
            return 0;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品网站| 亚洲国产色一区| 日韩精品在线一区| 欧美日韩精品欧美日韩精品一 | 日韩电影在线观看一区| 亚洲欧美一区二区三区久本道91| 国产欧美一区二区精品忘忧草| 欧美α欧美αv大片| 精品福利一二区| 久久一夜天堂av一区二区三区| 精品久久久网站| 国产色爱av资源综合区| 国产精品色哟哟| 最新欧美精品一区二区三区| 中文字幕在线不卡| 一区二区成人在线| 亚洲va欧美va人人爽| 亚洲国产精品一区二区www在线| 偷拍一区二区三区四区| 日本美女一区二区三区视频| 免费在线成人网| 高清av一区二区| 99精品视频免费在线观看| 日本黄色一区二区| 日韩一本二本av| 欧美国产日韩在线观看| 136国产福利精品导航| 亚洲动漫第一页| 国产呦萝稀缺另类资源| 粉嫩av一区二区三区粉嫩| 在线一区二区观看| 欧美tickling网站挠脚心| 国产无人区一区二区三区| 亚洲人成精品久久久久| 五月婷婷另类国产| 成人看片黄a免费看在线| 色婷婷综合久久久久中文一区二区 | 风流少妇一区二区| 欧美三级中文字幕在线观看| 日韩视频在线观看一区二区| 中文字幕av资源一区| 亚洲h动漫在线| 成人晚上爱看视频| 欧美一区二区三级| 一级特黄大欧美久久久| 久久精品国产999大香线蕉| 99久免费精品视频在线观看| 日韩视频免费直播| 一区二区三区日韩欧美| 国产一区二区不卡在线| 欧美日韩极品在线观看一区| 欧美国产日韩在线观看| 久久精品噜噜噜成人88aⅴ| 色999日韩国产欧美一区二区| 亚洲精品在线免费观看视频| 亚洲妇女屁股眼交7| aaa亚洲精品| 国产欧美精品日韩区二区麻豆天美| 日韩国产精品大片| 欧美日韩中文一区| 亚洲精品网站在线观看| 粉嫩高潮美女一区二区三区| 亚洲精品一区在线观看| 日本不卡视频在线| 欧美人牲a欧美精品| 亚洲一二三级电影| 色婷婷久久久久swag精品| 亚洲国产精品激情在线观看| 国产一区久久久| 欧美精品一区二区三区在线| 日韩福利视频导航| 欧美一区二区国产| 婷婷国产v国产偷v亚洲高清| 欧美性大战久久久久久久| 亚洲精品欧美激情| 日本电影亚洲天堂一区| 亚洲视频在线一区观看| 91免费观看视频在线| 亚洲视频你懂的| 一本大道av一区二区在线播放| 亚洲欧洲成人自拍| 色综合中文综合网| 日韩精品自拍偷拍| 麻豆精品在线观看| 日韩欧美在线网站| 国产真实乱子伦精品视频| 精品国产99国产精品| 国模娜娜一区二区三区| 久久精品亚洲国产奇米99| 东方aⅴ免费观看久久av| 国产精品视频你懂的| 色哟哟欧美精品| 亚洲成人免费看| 精品福利一区二区三区| 粉嫩一区二区三区在线看| 亚洲人成精品久久久久久| 欧美在线视频不卡| 久久9热精品视频| 欧美激情一区不卡| 在线免费av一区| 老司机精品视频在线| 国产丝袜美腿一区二区三区| 色综合久久天天综合网| 日韩不卡一二三区| 精品国产一区二区精华| 成人国产精品免费| 亚洲成人免费影院| 国产三级一区二区三区| 91国偷自产一区二区三区观看| 首页国产丝袜综合| 欧美高清在线视频| 欧美日韩精品免费| 丁香天五香天堂综合| 亚洲国产视频a| 中文乱码免费一区二区| 欧美片在线播放| eeuss鲁片一区二区三区在线看| 亚洲图片欧美色图| 337p粉嫩大胆色噜噜噜噜亚洲| 91免费版pro下载短视频| 免费亚洲电影在线| 亚洲一区二区视频在线| 久久久久成人黄色影片| 欧美麻豆精品久久久久久| 国产suv一区二区三区88区| 日韩成人av影视| 亚洲精品伦理在线| 国产欧美日韩不卡免费| 在线综合视频播放| 99久久免费国产| 国产一区二区电影| 日韩不卡手机在线v区| 亚洲精品视频自拍| 亚洲欧洲国产日本综合| 欧美激情一区二区三区四区 | 成人午夜av影视| 国产一区 二区| 日本不卡一二三| 午夜电影久久久| 亚洲成人综合在线| 一区二区三区四区在线播放| 中文字幕欧美激情| 国产欧美久久久精品影院| 精品国产一区二区在线观看| 欧美精品1区2区3区| 欧美综合色免费| 99国产精品国产精品久久| 国产aⅴ综合色| 韩国一区二区三区| 狠狠色丁香婷婷综合| 另类综合日韩欧美亚洲| 免费在线观看一区二区三区| 蜜臀精品久久久久久蜜臀| 日本不卡高清视频| 极品美女销魂一区二区三区免费| 日日摸夜夜添夜夜添亚洲女人| 天天影视涩香欲综合网| 午夜成人在线视频| 久久国产尿小便嘘嘘尿| 国产精品一区二区男女羞羞无遮挡| 久久国产免费看| 国产福利电影一区二区三区| 国产成人精品午夜视频免费| 丁香婷婷综合激情五月色| 99精品久久99久久久久| 在线区一区二视频| 538在线一区二区精品国产| 日韩亚洲国产中文字幕欧美| 日韩天堂在线观看| 国产欧美一区二区精品婷婷| 国产精品毛片久久久久久久| 亚洲日本成人在线观看| 亚洲va国产天堂va久久en| 奇米影视7777精品一区二区| 国产主播一区二区三区| 成人一区二区在线观看| 欧美三级一区二区| 精品国产乱码久久久久久影片| 久久亚洲私人国产精品va媚药| 欧美激情在线一区二区| 亚洲福利国产精品| 国产精品一区二区三区网站| 91丨porny丨中文| 日韩一区二区三区观看| 国产精品久久久久毛片软件| 亚洲午夜日本在线观看| 精品一二三四在线| 91老司机福利 在线| 日韩视频在线观看一区二区| 国产精品素人视频| 日本不卡视频在线| 91在线国产观看| 欧美变态凌虐bdsm| 亚洲另类一区二区| 精品亚洲免费视频| 欧美色区777第一页| 国产偷国产偷精品高清尤物| 三级成人在线视频| 99国产精品久久久久久久久久| 欧美一区二区日韩一区二区|