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

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

?? btree.c

?? 該文件夾中包含了大部分經典的算法的源程序代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* file name: btree.c */
/* 利用B-TREE來處理數據--加載、儲存、新增、刪除、修改、查詢、輸出 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#define MAX 2    /* 每一節點內至多可放數據筆數 */
#define MIN 1    /* 每一節點內至少需放數據筆數 */
typedef struct student {    /* 數據結構 */
 int count;                /* 節點數據數 */
 int id[MAX+1];            /* ID號碼--鍵值 */
 char name[MAX+1][11];     /* 姓名 */
 int score[MAX+1];         /* 分數 */
 struct student *link[MAX+1];    /* 子鏈接 */
} Node_type;
Node_type *root;
void init_f(FILE *);  /* 初始化函數 */
void insert_f(void);  /* 新增函數 */
Node_type *access(int, char *, int, Node_type *);  /* 將新增數據加入B-tree中 */
int topdown(int, char *, int, Node_type *, int *, char *, int *,
   Node_type **);  /* 從根節點往下逐一尋找插入點,將數據新增的函數 */
/* 將數據置于某特定節點中 */
void putdata(int, char *, int, Node_type *, Node_type *, int);
void broken(int, char *, int, Node_type *, Node_type *, int, int *, char *,
   int *, Node_type **);  /* 將一節點劃分為二 */
void update_f(void);  /* 修改函數 */
void delete_f(void);  /* 刪除函數 */
Node_type *removing(int, Node_type *);  /* 將數據從B-tree中刪除 */
int deldata(int, Node_type *);  /* 刪除數據函數 */
void move(Node_type *, int);  /* 將節點中的數據逐一往左移 */
void replace(Node_type *, int);  /* 尋找替代節點 */
void restore(Node_type *, int);  /* 數據刪除后的調整工作 */
void getleft(Node_type *, int);  /* 向左兄弟節點借一筆數據 */
void getright(Node_type *, int);  /* 向右兄弟節點借一筆數據 */
void combine(Node_type *, int);  /* 節點合并 */
void list_f(void);  /* 輸出函數 */
void show(Node_type *);  /* 以遞歸方式依序將數據輸出 */
void query_f(void);  /* 查詢函數 */
void save(Node_type *, FILE *);  /* 儲存函數 */
void quit(void);  /* 結束函數 */
Node_type * search(int, Node_type *, int *);  /* 依鍵值查找某特定節點函數 */
int searchnode(int, Node_type *, int *);  /* 依鍵值查找節點中某特定數據函數 */


void main(void)
{
     int flag=0, times=1;  /* times是判斷是否為第一次進入需要加載輸入文件 */
    FILE *infile, *outfile;
    char choice, filename[11], ans;
    system("cls");
    while(1)
    {
        if(times == 1)
    	{
        	do
    		{
                    /* 要求輸入加載文件名稱 */
                printf("\n  Please enter input file name: ");
                scanf("%s", filename);
                if((infile = fopen(filename, "r")) == NULL)
        		{
                    puts("  File name not found!!");
                	flag = 0;
        		}
        		else
                	flag = 1;
            }  while(flag == 0);  /* flag為0時,表示輸入錯誤,會要求重新輸入 */
            times++;
    	}
        fseek(infile, 0, 0);
        init_f(infile);
     do
     {
            printf("\n");
            puts("  *********************");
            puts("        1.insert");
            puts("        2.update");
            puts("        3.delete");
            puts("        4.list");
            puts("        5.query");
            puts("        6.save");
            puts("        7.quit");
            puts("  *********************");
            printf("  Please enter your choice(1..7): ");
            choice = getche();
            printf("\n");
            switch(choice)
            {
                case '1':
     	           insert_f();
            		break;
                case '2':
                	update_f();
            		break;
                case '3':
                	delete_f();
            		break;
                case '4':
                	list_f();
            		break;
                case '5':
                	query_f();
            		break;
                case '6':
                	flag = 0;
        			do
        			{
                        puts("\n  ---- SAVE ----");
                        printf("  Please enter saving file name: ");
                        scanf("%s", filename);
                        if((outfile = fopen(filename, "w")) == NULL)
        				{
                            puts(" File name can not be used!!");
                			flag = 0;
        				}
            			else
                           flag=1;
                    }  while(flag == 0);
                    save(root, outfile);
                    printf("  Save OK!\n");
                    fclose(outfile);
            		break;
                case '7': printf("  Are you sure? (Y/N): ");
                    ans = getche();
                    ans = toupper(ans);
                    if(ans == 'Y')
        			{
                        fclose(infile);
                		quit();
        			}
            		break;
                default: puts("  Choice error!!");
    		}
        }  while(choice != '7');
    }
}


/* 讀入輸入文件數據至B-tree中,infile為輸入文件名稱 */
void init_f(FILE *infile)
{
    int init_id, init_score;
    char init_name[11];
    root = NULL;
    while(fscanf(infile, "%d %10s %d\n", &init_id, init_name, &init_score)
            		!= EOF)
    {
        root = access(init_id, init_name, init_score, root);
    }
}

/* 新增一筆數據,并調整為B-tree */
void insert_f(void)
{
     int position, insert_id, insert_score; /* position記錄數據在節點中新增的位置 */
    Node_type *node;
    char ans, insert_name[11];
    puts("\n  ---- INSERT ----");
    puts("  Please enter detail data");
    printf("  ID number: ");
    scanf("%d", &insert_id);
     /* 找尋新增數據是否已存在,若存在,則顯示錯誤 */
    node = search(insert_id, root, &position);
    if(node != NULL)
        puts(" ID number has existed!!");
    else
    {
        printf("  Name: ");  /* 要求輸入其它詳細數據 */
        scanf("%s'", insert_name);
        printf("  Score: ");
        scanf("%d", &insert_score);
        printf("  Are you sure? (Y/N): ");
        ans = getche();
        printf("\n");
        ans = toupper(ans);
        if(ans == 'Y')
            root = access(insert_id, insert_name, insert_score, root);
    }
}

/* 將新增數據加入B-TREE,node指加入節點,傳回值為root所在 */
Node_type *access(int app_id, char *app_name, int app_score, Node_type *node)
{
    int x_id, x_score, pushup;   /* pushup判斷節點是否需劃分而往上新增一節點 */
    char x_name[11];
    Node_type *xr, *p;
    pushup = topdown(app_id, app_name, app_score, node, &x_id, x_name,
                        &x_score, &xr);
    if(pushup)   /* 若pushup為1,則配置一個新節點,將數據放入 */
    {
        p = (Node_type *) malloc(sizeof(Node_type));
        p->link[0] = NULL;
        p->link[1] = NULL;
        p->link[2] = NULL;
        p->count = 1;
        p->id[1] = x_id;
        strcpy(p->name[1], x_name);
        p->score[1] = x_score;
        p->link[0] = root;
        p->link[1] = xr;
        return p;
    }
    return node;
}


/* 從樹根往下尋找數據加入節點,將數據新增于B-tree中,參數p為目前所在節點,
   xr記錄數據所對應的子鏈接 */
int topdown(int new_id, char *new_name, int new_score, Node_type *p,
            int *x_id, char *x_name, int *x_score, Node_type **xr)
{
    int k;
     if(p == NULL)  /* p為NULL表示新增第一筆數據 */
    {
        *x_id = new_id;
        strcpy(x_name, new_name);
        *x_score = new_score;
        *xr = NULL;
        return 1;
    }
    else
    {
          if(searchnode(new_id, p, &k))  /* 找尋新增數據鍵值是否重復,若重復則顯示錯誤 */
    	{
            puts("  Data error, ID number has existed!!");
            quit();
            return 0;
    	}
         /* 繼續往下找尋新增節點 */
        if(topdown(new_id, new_name, new_score, p->link[k], x_id, x_name,
                    x_score, xr))
    	{
            if(p->count < MAX)  /* 若新增節點有足夠的空間存放數據,則將數據直接加入該節點 */ 
    		{
            putdata(*x_id, x_name, *x_score, *xr, p, k);
            return 0;
    		}
        	else
    		{
                 /* 若無足夠空間,則須劃分節點 */
                broken(*x_id, x_name, *x_score, *xr, p, k, x_id, x_name, x_score, xr);
                return 1;
    		}
    	}
        else
            return 0;
    }
}

/* 將新增數據直接加入于節點中,xr為新增數據對應的子鏈接所在,p為數據加入的節點 */
void putdata(int x_id, char *x_name, int x_score, Node_type *xr,
                Node_type *p, int k)
{
    int i;
    /* 將節點中的數據逐一右移,以空出新增數據加入的位置 */
    for(i = p->count; i > k; 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->id[k+1] = x_id;
    strcpy(p->name[k+1], x_name);
    p->score[k+1] = x_score;
    p->link[k+1] = xr;
    p->count++;
}

/* 將節點一分為二,yr為劃分后新增加的節點 */
void broken(int x_id, char *x_name, int x_score, Node_type *xr, Node_type *p,
            int k, int *y_id, char *y_name, int *y_score, Node_type **yr)
{
    int i;
    int median;    /* median記錄從何處劃分節點 */
    if(k <= MIN)
        median = MIN;
    else
        median = MIN + 1;
    *yr = (Node_type *) malloc(sizeof(Node_type));
     /* 將數據從劃分處開始搬移至新節點中 */
    for(i = median + 1; i <= MAX; i++)
    {
        (*yr)->id[i-median] = p->id[i];
        strcpy((*yr)->name[i-median], p->name[i]);
        (*yr)->score[i-median] = p->score[i];
        (*yr)->link[i-median] = p->link[i];
    }
    (*yr)->count = MAX - median;
    p->count = median;
    if(k <= MIN)
        putdata(x_id, x_name, x_score, xr, p, k);
    else
        putdata(x_id, x_name, x_score, xr, *yr, k - median);
    *y_id = p->id[p->count];
    strcpy(y_name, p->name[p->count]);
    *y_score = p->score[p->count];
    (*yr)->link[0] = p->link[p->count];
    p->count--;
}

/* 修改數據函數 */
void update_f(void)
{
    int update_id, update_score, position;
    char ans, update_name[11];
    Node_type *node;
    puts("\n  ---- UPDATE ----");
    printf("  Please enter ID number: ");
    scanf("%d", &update_id);
    node = search(update_id, root, &position);   /* 找尋欲修改數據所在節點位置 */
    if(node != NULL)
    {
        printf("  Original name: %s\n", node->name[position]);
        printf("  Please enter new name: ");
        scanf("%10s", update_name);
        printf("  Original score: %d\n", node->score[position]);
        printf("  Please enter new score: ");
        scanf("%d", &update_score);
        printf("  Are you sure? (Y/N): ");
        ans = getche();
        printf("\n");
        ans = toupper(ans);
        if(ans == 'Y')
    	{
            node->score[position] = update_score;
            strcpy(node->name[position], update_name);
    	}
    }
    else
        puts("  ID number not found!!");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伦理电影网| 国产精品天天看| 中文字幕在线不卡国产视频| 亚洲大片在线观看| 成人动漫在线一区| 欧美一级在线视频| 一区二区久久久久久| 国产乱子伦一区二区三区国色天香| 日本道色综合久久| 久久九九99视频| 麻豆精品蜜桃视频网站| 在线观看国产91| 中文字幕一区二区5566日韩| 蜜桃视频一区二区三区在线观看| 在线视频一区二区三| 国产欧美一区在线| 久久se精品一区二区| 欧美蜜桃一区二区三区| 亚洲男同性视频| 99久久99久久精品国产片果冻| 26uuu久久天堂性欧美| 人人爽香蕉精品| 这里只有精品99re| 亚洲不卡在线观看| 欧美日韩国产美女| 一区二区高清免费观看影视大全| 国产不卡免费视频| 欧美国产丝袜视频| 高清不卡在线观看av| 久久久精品免费免费| 国产一区二区不卡老阿姨| 911精品产国品一二三产区| 麻豆精品一区二区| 奇米在线7777在线精品| 亚洲精品一线二线三线无人区| av中文字幕不卡| 国产制服丝袜一区| 精品视频色一区| 另类小说色综合网站| 一二三区精品福利视频| 亚洲成人三级小说| 中文字幕亚洲一区二区va在线| 韩国一区二区视频| 中文字幕av资源一区| 91亚洲永久精品| 亚洲综合无码一区二区| 欧美精品在线一区二区三区| 免费三级欧美电影| 久久一留热品黄| 成人高清免费在线播放| 亚洲精品亚洲人成人网在线播放| 91福利国产精品| 亚洲乱码国产乱码精品精小说 | 国模一区二区三区白浆| 国产精品看片你懂得| 精品国产凹凸成av人网站| 欧美中文字幕不卡| 91亚洲国产成人精品一区二区三 | 久久99最新地址| 日本韩国一区二区三区| 欧美军同video69gay| 日韩免费看的电影| 亚洲国产成人精品视频| 成人久久久精品乱码一区二区三区| 欧美午夜影院一区| 亚洲色图制服丝袜| 亚洲一区在线观看网站| 久久久久久久久久看片| 欧美日韩精品一区二区天天拍小说 | 久久精品夜色噜噜亚洲aⅴ| 国产女人18毛片水真多成人如厕| 国产精品久久久久精k8| 一区二区三区在线免费| 成人深夜在线观看| 日本一区二区成人| 国产凹凸在线观看一区二区| 欧美tickle裸体挠脚心vk| 欧美一区二区视频观看视频| 亚洲欧洲日产国码二区| 亚洲自拍都市欧美小说| 蜜乳av一区二区| 国产精品一区专区| 日韩视频在线一区二区| 宅男噜噜噜66一区二区66| www亚洲一区| 成人激情黄色小说| 捆绑紧缚一区二区三区视频| 国内精品嫩模私拍在线| 99久久精品一区二区| 91国偷自产一区二区使用方法| www.日本不卡| 日韩欧美一区在线| 亚洲欧美日韩国产成人精品影院| 蜜桃免费网站一区二区三区| 九九视频精品免费| 日韩欧美不卡在线观看视频| 成人在线综合网站| 亚洲精品久久久蜜桃| 亚洲在线成人精品| 一本色道综合亚洲| 香蕉久久夜色精品国产使用方法 | 国产性色一区二区| 麻豆久久一区二区| 亚洲丝袜精品丝袜在线| 2023国产精品视频| 欧美三片在线视频观看| www.99精品| 国产在线精品一区二区夜色| 视频一区在线播放| 亚洲色图制服诱惑 | 久久久久久免费网| 在线不卡欧美精品一区二区三区| www.欧美精品一二区| 国产在线观看免费一区| 午夜久久久影院| 亚洲乱码国产乱码精品精98午夜| wwww国产精品欧美| 日韩精品一区二区三区老鸭窝| 欧美中文字幕亚洲一区二区va在线| 丁香天五香天堂综合| 久久精品99久久久| 免费成人你懂的| 奇米影视在线99精品| 婷婷国产在线综合| 亚洲成人1区2区| 亚洲精品高清在线观看| 国产精品久久一级| 欧美国产精品v| 国产欧美日韩精品一区| 欧美一区二区日韩| 色香蕉成人二区免费| 97久久精品人人爽人人爽蜜臀| 久久99国产乱子伦精品免费| 亚洲国产欧美另类丝袜| 亚洲一级电影视频| 亚洲第一主播视频| 午夜激情综合网| 天天综合色天天| 日韩精品国产欧美| 男男视频亚洲欧美| 蜜桃免费网站一区二区三区| 日本成人在线看| 青青草成人在线观看| 首页亚洲欧美制服丝腿| 日精品一区二区三区| 麻豆传媒一区二区三区| 久久99国产精品免费网站| 激情深爱一区二区| 国产不卡高清在线观看视频| 91在线免费看| 欧美乱熟臀69xxxxxx| 日韩欧美国产一区二区在线播放 | 欧美丝袜丝交足nylons图片| 欧美精品丝袜久久久中文字幕| 日韩欧美中文字幕一区| 久久精品日韩一区二区三区| 国产精品拍天天在线| 亚洲久草在线视频| 日韩中文欧美在线| 国产激情一区二区三区| 色欧美日韩亚洲| 日韩欧美国产高清| 国产精品高潮久久久久无| 午夜国产精品影院在线观看| 国产乱码精品一区二区三区av| av在线一区二区三区| 91精品国产综合久久蜜臀| 久久久精品免费网站| 亚洲日本va午夜在线影院| 亚洲精品乱码久久久久久久久| 激情综合色丁香一区二区| 韩国一区二区视频| 在线亚洲免费视频| 久久综合av免费| 亚洲午夜激情网站| 国产成人精品亚洲777人妖 | 精品国产成人在线影院 | 91豆麻精品91久久久久久| 日韩女优电影在线观看| 亚洲欧洲精品天堂一级| 日本不卡高清视频| 91黄色激情网站| 国产午夜亚洲精品理论片色戒| 亚洲成人av电影| 成人爱爱电影网址| 久久青草欧美一区二区三区| 亚洲www啪成人一区二区麻豆| 高清beeg欧美| 日韩一区二区三区在线| 国产精品国产三级国产专播品爱网| 久久99国产精品久久| 欧美日韩大陆在线| 国产精品久久久久久久久快鸭| 日本欧美一区二区在线观看| 99国产精品久久久久久久久久| 2020国产精品| 久久精工是国产品牌吗| 在线亚洲人成电影网站色www| 久久久五月婷婷| 精品伊人久久久久7777人|