亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人性视频免费网站| 欧美精品一区二区三区高清aⅴ | 毛片基地黄久久久久久天堂| 国产福利一区二区三区在线视频| 91国产精品成人| 久久精品亚洲精品国产欧美kt∨| 一区二区三区在线观看欧美 | 亚洲猫色日本管| 久久国产精品99精品国产| 972aa.com艺术欧美| 欧美精品一区二区精品网| 亚洲成人一区在线| 91在线精品秘密一区二区| 久久免费看少妇高潮| 日韩电影一二三区| 色综合色狠狠综合色| 国产欧美日韩精品a在线观看| 日韩黄色在线观看| 欧美手机在线视频| 亚洲伦理在线免费看| 成人综合在线观看| 亚洲天堂免费看| 久久99国产精品久久99果冻传媒| 日本久久电影网| 中文字幕欧美日本乱码一线二线| 美国欧美日韩国产在线播放| 欧美三级韩国三级日本三斤| 亚洲情趣在线观看| 成人91在线观看| 久久综合久久综合九色| 久久99深爱久久99精品| 91精品国产色综合久久不卡电影| 亚洲国产中文字幕在线视频综合| 91麻豆国产香蕉久久精品| 中文字幕一区二区三区在线不卡 | 欧美aaaaaa午夜精品| 欧美三级一区二区| 亚洲一级电影视频| 欧洲国产伦久久久久久久| 亚洲精品中文在线影院| 色94色欧美sute亚洲13| 一区二区三区久久| 欧美久久一区二区| 免费在线观看不卡| 亚洲精品一区二区在线观看| 久久91精品国产91久久小草 | 久久亚洲一级片| 国产在线精品不卡| 国产欧美日韩三区| 色综合色综合色综合色综合色综合| 成人欧美一区二区三区| 日本高清无吗v一区| 亚洲一二三四在线观看| 欧美一区二区三区在线看| 免费欧美在线视频| 国产亚洲女人久久久久毛片| 丁香另类激情小说| 亚洲欧美自拍偷拍色图| 欧美体内she精视频| 日韩成人免费电影| 国产日韩综合av| 91猫先生在线| 免费观看在线综合色| 国产欧美精品一区二区三区四区| 99久久精品免费精品国产| 亚洲成人av电影在线| 精品精品欲导航| 99久久99精品久久久久久| 亚洲高清不卡在线| 久久久久久久久久久黄色| 99re热这里只有精品视频| 午夜精品aaa| 国产欧美日韩不卡免费| 91福利在线播放| 激情国产一区二区 | |精品福利一区二区三区| 欧美日本不卡视频| 成人激情综合网站| 首页国产丝袜综合| 国产精品的网站| 日韩一级黄色片| aaa国产一区| 久久精品99久久久| 亚洲综合丁香婷婷六月香| 久久精品一区二区三区不卡 | 色欧美日韩亚洲| 久久www免费人成看片高清| 亚洲色图一区二区| 精品动漫一区二区三区在线观看| 色域天天综合网| 国产精品小仙女| 蜜臀av亚洲一区中文字幕| 亚洲女人****多毛耸耸8| 久久久精品欧美丰满| 91精品啪在线观看国产60岁| 色吧成人激情小说| 成人av午夜电影| 国产一区二区三区精品欧美日韩一区二区三区 | 一区二区三区鲁丝不卡| 午夜精品一区二区三区电影天堂| 久久久精品影视| 欧美一区二区黄| 欧美日韩中文字幕一区二区| 成人av资源在线观看| 国产精品911| 久久激情综合网| 午夜一区二区三区视频| 亚洲精品国产高清久久伦理二区| 欧美国产国产综合| 久久久久久黄色| 精品盗摄一区二区三区| 日韩午夜在线播放| 91精品国产美女浴室洗澡无遮挡| 日本高清不卡一区| 色网综合在线观看| 色一区在线观看| 91福利小视频| 在线亚洲免费视频| 色婷婷国产精品| 欧洲av在线精品| 欧美丝袜丝nylons| 欧美高清精品3d| 在线不卡的av| 欧美一区二区三区视频在线观看| 欧美片网站yy| 日韩天堂在线观看| 久久亚洲欧美国产精品乐播| 久久久久9999亚洲精品| 国产精品久久久久久久浪潮网站 | 在线观看91精品国产入口| 色婷婷一区二区三区四区| 在线精品视频免费播放| 欧美视频一区二区三区在线观看| 欧美午夜精品电影| 欧美日本在线播放| 精品国产免费视频| 欧美激情中文不卡| 亚洲精品成人在线| 日本三级亚洲精品| 国产精品一级黄| 99久久久久久| 欧美午夜影院一区| 欧美一二三区精品| 国产精品区一区二区三| 伊人夜夜躁av伊人久久| 日本vs亚洲vs韩国一区三区二区| 精品亚洲porn| 97久久精品人人澡人人爽| 欧美日本一区二区三区| 国产亚洲va综合人人澡精品| 亚洲色图色小说| 日本伊人午夜精品| 岛国av在线一区| 欧美精品第1页| 国产免费观看久久| 成人精品电影在线观看| 欧美在线观看一区| www国产精品av| 一区二区三区精品在线观看| 九色综合狠狠综合久久| 色婷婷激情久久| 久久综合狠狠综合久久激情| 亚洲欧美日韩国产中文在线| 日韩中文字幕亚洲一区二区va在线 | 午夜精品123| 成人性生交大片免费看中文| 欧美色区777第一页| 国产精品色噜噜| 免费的国产精品| 欧洲国内综合视频| 国产精品久久久久影视| 久久精品国产澳门| 欧美欧美午夜aⅴ在线观看| 中国av一区二区三区| 免费成人在线影院| 欧美日韩成人激情| 亚洲男同1069视频| 成人一区二区三区视频| 日韩三级av在线播放| 亚洲自拍欧美精品| 99久久精品免费精品国产| 精品福利视频一区二区三区| 亚洲国产精品久久久久婷婷884 | 久久婷婷久久一区二区三区| 亚洲成人中文在线| 色婷婷综合激情| 国产精品久久国产精麻豆99网站| 久久国产精品区| 7777精品伊人久久久大香线蕉| 亚洲欧美日韩人成在线播放| 不卡电影一区二区三区| 久久精品日产第一区二区三区高清版| 欧美aaa在线| 91精品国产高清一区二区三区| 一区二区三区日韩欧美| 日本高清无吗v一区| 亚洲狼人国产精品| 日本道色综合久久| 一区二区三区四区蜜桃| 色94色欧美sute亚洲线路一久|