{"id":68,"date":"2013-12-20T02:00:47","date_gmt":"2013-12-20T02:00:47","guid":{"rendered":""},"modified":"2013-12-20T02:00:47","modified_gmt":"2013-12-20T02:00:47","slug":"","status":"publish","type":"post","link":"http:\/\/weizn.net\/?p=68","title":{"rendered":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178"},"content":{"rendered":"<pre class=\"brush:cpp; toolbar: true; auto-links: true;\">\/*------------------------------------Main.cpp----------------------------------------------*\/\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;windows.h&gt;\r\n#include &lt;conio.h&gt;\r\n\r\n#include \"GUI.h\"\r\n#include \"global.h\"\r\n#include \"AVL.h\"\r\n#include \"FileOper.h\"\r\n#include \"init.h\"\r\n#include \"menu.h\"\r\n\r\nint main(int argc,char *argv[])\r\n{\r\n InitGUI();\r\n int choose,result;\r\n\r\n if(!InitFile())\r\n {\r\n  print(\"\u521d\u59cb\u5316\u6587\u4ef6\u5931\u8d25\u3002\",RED);\r\n  _getch();\r\n  return -1;\r\n }\r\n if(!InitIndex())\r\n {\r\n  print(\"\u521d\u59cb\u5316\u7d22\u5f15\u5931\u8d25\u3002\",RED);\r\n  _getch();\r\n  return -1;\r\n }\r\n\r\nagain:\r\n ShowAVLDepth();\r\n ShowCount();\r\n ShowFileSize();\r\n while(!(choose=GetMouse()));\r\n text2_y=222;                  \/\/\u63a7\u5236\u53f0\u6d88\u606f\u8f93\u51fa\u5750\u6807\u521d\u59cb\u5316\r\n cover(251,222,473,378);\r\n switch(choose)\r\n {\r\n case 1:\r\n  if(!(result=Add_Word()))\r\n  {\r\n   print(\"\u6dfb\u52a0\u8bcd\u6761\u5931\u8d25\u3002\",RED);\r\n  }\r\n  else if(result==1)\r\n  {\r\n   print(\"\u6dfb\u52a0\u8bcd\u6761\u6210\u529f\u3002\",GREEN);\r\n  }\r\n  else\r\n  {\r\n   print(\"\u8bcd\u5e93\u6ca1\u6709\u53d8\u52a8\u3002\",YELLOW);\r\n  }\r\n  break;\r\n case 2:\r\n  Query();\r\n  InitMenu();\r\n  break;\r\n case 3:\r\n  if(!OptimizeIndexFile())\r\n  {\r\n   print(\"\u4f18\u5316\u7d22\u5f15\u6587\u4ef6\u5931\u8d25,\u7d22\u5f15\u6587\u4ef6\u53ef\u80fd\u5df2\u7ecf\u635f\u574f!\",RED);\r\n  }\r\n  else\r\n  {\r\n   print(\"\u4f18\u5316\u7d22\u5f15\u6587\u4ef6\u6210\u529f.\",GREEN);\r\n  }\r\n  print(\"\u662f\u5426\u67e5\u770b\u7d22\u5f15\u6587\u4ef6\u7ed3\u6784?[Y\/N]\",GREEN);\r\n  fflush(stdin);\r\n  choose=_getch();\r\n  if(choose=='y' || choose=='Y')\r\n   ShowFile();\r\n  text2_y=222;                  \/\/\u63a7\u5236\u53f0\u6d88\u606f\u8f93\u51fa\u5750\u6807\u521d\u59cb\u5316\r\n  cover(251,222,473,378);\r\n  break;\r\n }\r\n Sleep(500);           \/\/\u9632\u6b62\u9f20\u6807\u8fde\u51fb\r\n goto again;\r\n return 0;\r\n}\r\n\r\n\/*------------------------------------global.h----------------------------------------------*\/\r\n\r\n#ifndef _GLOBAL_H_\r\n#define _GLOBAL_H_\r\n\r\n#include &lt;windows.h&gt;\r\n\r\n\/\/\u8bcd\u6761\u7ed3\u6784\u4f53\r\ntypedef struct\r\n{\r\n char word[50];               \/\/\u8bcd\u6761\u540d\r\n char property[20];           \/\/\u8bcd\u6027\r\n char pronunciation[50];      \/\/\u8bfb\u97f3\r\n char describe[100];          \/\/\u91ca\u4e49\r\n}WORD_INFO;\r\n\/*------------------------AVL----------------------------------------*\/\r\n\/\/\u7d22\u5f15\u7ed3\u6784\u4f53\r\ntypedef struct\r\n{\r\n int ASCII;                \/\/\u5355\u8bcdASCII\u4e4b\u548c\r\n LARGE_INTEGER Start;      \/\/\u6587\u4ef6\u5185\u7684\u8d77\u59cb\u4f4d\u7f6e\r\n unsigned int Count;       \/\/\u76f8\u540cASCII\u548c\u7684\u8bcd\u6761\u6570\u76ee\r\n}INDEXDATA;\r\n\r\n\/\/AVL\u6811\u8282\u70b9\u5143\u7d20\r\ntypedef struct BiTree\r\n{\r\n int balance;              \/\/\u5e73\u8861\u56e0\u5b50\r\n INDEXDATA data;           \/\/\u8282\u70b9\u6570\u636e\r\n struct BiTree *left;\r\n struct BiTree *right;\r\n struct BiTree *father;    \/\/\u6307\u5411\u53cc\u4eb2\u8282\u70b9\r\n} AVL;\r\n\r\nAVL *AVL_ROOT=NULL;                  \/\/AVL\u6811\u6839\u6307\u9488\r\n\/*------------------------Stack----------------------------------------*\/\r\n#define STACK_DATATYPE AVL*          \/\/\u6808\u5143\u7d20\u7c7b\u578b\u4e3aAVL\u8282\u70b9\u6307\u9488\r\ntypedef struct\r\n{\r\n STACK_DATATYPE *top;             \/\/\u6808\u9876\u6307\u9488\r\n STACK_DATATYPE *base;            \/\/\u6808\u5e95\u6307\u9488\r\n int stacksize;             \/\/\u6808\u5bb9\u91cf\r\n}Stack;\r\n\r\nStack S;                      \/\/\u6808\u7ed3\u6784\u53d8\u91cf\r\n\/*------------------------Queue----------------------------------------*\/\r\n#define QUEUE_DATATYPE AVL*\r\ntypedef struct QueueNode\r\n{\r\n QUEUE_DATATYPE data;\r\n struct QueueNode *next;\r\n}QNode;\r\n\r\ntypedef struct\r\n{\r\n QNode *start;               \/\/\u961f\u5217\u8d77\u59cb\u5730\u5740\r\n QNode *end;                 \/\/\u961f\u5217\u672b\u5c3e\u5730\u5740\r\n int queuesize;              \/\/\u961f\u5217\u8282\u70b9\u4e2a\u6570\r\n}Queue;\r\n\r\n\/*----------------------------------------------------------------------*\/\r\n\r\nHANDLE hDataFile;                       \/\/\u6570\u636e\u5e93\u6587\u4ef6\u53e5\u67c4\r\nHANDLE hIndexFile;                      \/\/\u7d22\u5f15\u6587\u4ef6\u53e5\u67c4\r\nLARGE_INTEGER DataFileSize;             \/\/\u6570\u636e\u5e93\u6587\u4ef6\u5927\u5c0f\r\n\r\nconst char *IndexFilePath=\"IndexFile\";    \/\/\u7d22\u5f15\u6587\u4ef6\u8def\u5f84\r\nconst char *DataFilePath=\"DataFile\";      \/\/\u6570\u636e\u5e93\u6587\u4ef6\u8def\u5f84\r\n\r\n#endif        \/\/_GLOBAL_H_\r\n\r\n\/*------------------------------------unicode.h----------------------------------------------*\/\r\n\r\n#ifndef _UNICODE_H_\r\n#define _UNICODE_H_\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;windows.h&gt;\r\n#include &lt;locale.h&gt;\r\n\r\nchar *TCHARToChar(LPWSTR lpwszStrIn)\r\n{\r\n LPSTR pszOut = NULL;\r\n if (lpwszStrIn != NULL)\r\n {\r\n  int nInputStrLen = wcslen (lpwszStrIn);\r\n  int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;\r\n  pszOut = new char [nOutputStrLen];\r\n\r\n  if (pszOut)\r\n  {\r\n   memset (pszOut, 0x00, nOutputStrLen);\r\n   WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);\r\n  }\r\n }\r\n return pszOut;\r\n}\r\n          \r\nTCHAR *CharToTCHAR(const char *str)\r\n{\r\n TCHAR T[100];\r\n memset(T,NULL,sizeof(T));\r\n MultiByteToWideChar(CP_ACP,0,str,-1,T,sizeof(T));\r\n return T;\r\n}\r\n\r\n#endif     \/\/_UNICODE_H_\r\n\r\n \r\n\r\n\r\n\/*------------------------------------GUI.h----------------------------------------------*\/\r\n\r\n#ifndef _GUI_H_\r\n#define _GUI_H_\r\n\r\n#include &lt;graphics.h&gt;\r\n#include &lt;time.h&gt;\r\n#include &lt;windows.h&gt;\r\n#include &lt;tchar.h&gt;\r\n\r\n#include \"unicode.h\"\r\n#include \"global.h\"\r\n\r\nint InitGUI();\r\nint InitMenu();\r\nvoid print(char *str,int color);\r\nvoid cover(int x,int y,int width,int height);\r\nvoid ShowAVLDepth();\r\nvoid ShowAuthor();\r\nvoid ShowCount();\r\nvoid ShowFileSize();\r\n\r\nIMAGE image;\r\nCRITICAL_SECTION cs_image;                    \/\/\u58f0\u660e\u4e34\u754c\u533a\u5bf9\u8c61\r\n\r\nint InitGUI()\r\n{\r\n InitializeCriticalSection(&amp;cs_image);     \/\/\u521d\u59cb\u5316\u4e34\u754c\u533a\r\n initgraph(1000,600);\r\n SetWindowText(GetHWnd(),_T(\"\u6c49\u8bed\u8bcd\u5178\"));\r\n loadimage(&amp;image,_T(\"IMAGE\"),_T(\"BACKGROUND\"),1000,600);    \/\/\u521d\u59cb\u5316\u80cc\u666f\u56fe\u7247       \r\n SetWorkingImage(NULL);\r\n putimage(0,0,1000,600,&amp;image,0,0);\r\n setlinecolor(RED);\r\n setlinestyle(PS_SOLID,2);\r\n line(0,220,1000,220);\r\n line(0,345,250,345);\r\n line(0,470,250,470);\r\n line(250,220,250,600);\r\n line(725,220,725,600);\r\n line(725,408,1000,408);\r\n setlinestyle(PS_DOT);\r\n line(725,312,1000,312);\r\n line(725,504,1000,504);\r\n InitMenu();\r\n ShowAuthor();\r\n return 1;\r\n}\r\n\r\nint InitMenu()\r\n{\r\n cover(40,250,150,50);\r\n cover(40,370,150,50);\r\n cover(30,500,190,50);\r\n\r\n settextcolor(GREEN);\r\n setbkmode(TRANSPARENT);\r\n settextstyle(15,15,NULL);\r\n outtextxy(55,270,_T(\"\u6dfb\u52a0\u8bcd\u6761\"));\r\n outtextxy(55,395,_T(\"\u67e5\u627e\u8bcd\u6761\"));\r\n outtextxy(30,525,_T(\"\u4f18\u5316\u7d22\u5f15\u6587\u4ef6\"));\r\n return 1;\r\n}\r\n\r\nint Depth(AVL *root);\r\nvoid ShowAVLDepth()\r\n{\r\n char str[100];\r\n int depth=0;\r\n\r\n cover(726,221,273,80);\r\n settextstyle(0,0,NULL);\r\n settextcolor(GREEN);\r\n setbkmode(TRANSPARENT);\r\n memset(str,NULL,sizeof(str));\r\n if(AVL_ROOT)\r\n  depth=Depth(AVL_ROOT-&gt;left);\r\n else\r\n  depth=0;\r\n sprintf(str,\"AVL\u5de6\u5b50\u6811\u6df1\u5ea6:%d\",depth);\r\n outtextxy(780,240,CharToTCHAR(str));\r\n memset(str,NULL,sizeof(str));\r\n if(AVL_ROOT)\r\n  depth=Depth(AVL_ROOT-&gt;right);\r\n else\r\n  depth=0;\r\n sprintf(str,\"AVL\u53f3\u5b50\u6811\u6df1\u5ea6:%d\",depth);\r\n outtextxy(780,275,CharToTCHAR(str));\r\n\r\n return;\r\n}\r\n\r\nint NodeCount(AVL *root);\r\nint WordCount(AVL *root);\r\nvoid ShowCount()\r\n{\r\n char str[100];\r\n\r\n cover(726,314,273,80);\r\n memset(str,NULL,sizeof(str));\r\n settextstyle(0,0,NULL);\r\n settextcolor(GREEN);\r\n setbkmode(TRANSPARENT);\r\n memset(str,NULL,sizeof(str));\r\n sprintf(str,\"AVL\u8282\u70b9\u4e2a\u6570:%d\",NodeCount(AVL_ROOT));\r\n outtextxy(785,330,CharToTCHAR(str));\r\n memset(str,NULL,sizeof(str));\r\n sprintf(str,\"\u5df2\u6536\u5f55\u8bcd\u6761\u4e2a\u6570:%d\",WordCount(AVL_ROOT));\r\n outtextxy(780,365,CharToTCHAR(str));\r\n\r\n return;\r\n}\r\n\r\nvoid ShowFileSize()\r\n{\r\n char str[50];\r\n\r\n memset(&amp;DataFileSize,NULL,sizeof(LARGE_INTEGER));\r\n cover(726,410,273,80);\r\n settextstyle(0,0,NULL);\r\n settextcolor(GREEN);\r\n setbkmode(TRANSPARENT);\r\n GetFileSizeEx(hIndexFile,&amp;DataFileSize);             \/\/\u83b7\u53d6\u7d22\u5f15\u6587\u4ef6\u5927\u5c0f\r\n memset(str,NULL,sizeof(str));\r\n sprintf(str,\"\u7d22\u5f15\u6587\u4ef6\u5927\u5c0f:%d\u5b57\u8282\",DataFileSize.QuadPart);\r\n outtextxy(775,425,CharToTCHAR(str));\r\n memset(&amp;DataFileSize,NULL,sizeof(LARGE_INTEGER));\r\n GetFileSizeEx(hDataFile,&amp;DataFileSize);             \/\/\u83b7\u53d6\u7d22\u5f15\u6587\u4ef6\u5927\u5c0f\r\n memset(str,NULL,sizeof(str));\r\n sprintf(str,\"\u8bcd\u5e93\u6587\u4ef6\u5927\u5c0f:%d\u5b57\u8282\",DataFileSize.QuadPart);\r\n outtextxy(775,465,CharToTCHAR(str));\r\n\r\n return;\r\n}\r\n\r\nvoid ShowAuthor()\r\n{\r\n settextstyle(0,0,NULL);\r\n settextcolor(GREEN);\r\n setbkmode(TRANSPARENT);\r\n outtextxy(780,540,_T(\"By:\u8ba1\u79d112-1\u73ed  \u9b4f\u5b50\u6960\"));\r\n}\r\n\r\nint GetMouse()\r\n{\r\n MOUSEMSG m;                 \/\/ \u5b9a\u4e49\u9f20\u6807\u6d88\u606f\r\n memset(&amp;m,NULL,sizeof(MOUSEMSG));\r\n do\r\n {\r\n  FlushMouseMsgBuffer();\r\n  m=GetMouseMsg();          \/\/\u83b7\u53d6\u4e00\u6761\u9f20\u6807\u6d88\u606f\r\n }while(!m.mkLButton);         \/\/\u82e5\u9f20\u6807\u5de6\u952e\u6309\u4e0b\u5219\u9000\u51fa\u5faa\u73af\r\n\r\n if(m.x&gt;0 &amp;&amp; m.x&lt;250)\r\n  if(m.y&gt;220 &amp;&amp; m.y&lt;345)\r\n   return 1;\r\n  else if(m.y&gt;345 &amp;&amp; m.y&lt;470)\r\n   return 2;\r\n  else if(m.y&gt;470 &amp;&amp; m.y&lt;600)\r\n   return 3;\r\n\r\n  return 0;\r\n}\r\n\r\nstatic int text2_y=222;                 \/\/\u63a7\u5236\u53f0\u8f93\u51fa\u6d88\u606f\u5750\u6807\r\nvoid print(char *str,int color)\r\n{\r\n char str1[120],str2[60],*p=str;\r\n\r\n memset(str1,NULL,sizeof(str1));\r\n strcat(str1,p);\r\n p=str1;\r\n if(text2_y&gt;558)\r\n {\r\n  cover(251,222,473,378);\r\n  text2_y=222;\r\n }\r\n while(strlen(p)&gt;58)\r\n {\r\n  memset(str2,NULL,sizeof(str2));\r\n  memcpy(str2,p,58);\r\n  print(str2,color);\r\n  p+=58;\r\n }\r\n settextstyle(0,0,NULL);\r\n settextcolor(color);\r\n setbkmode(TRANSPARENT);\r\n outtextxy(252,text2_y,CharToTCHAR(p));\r\n text2_y+=16;\r\n}\r\n\r\nvoid cover(int x,int y,int width,int height)\r\n{\r\n IMAGE temp;\r\n EnterCriticalSection(&amp;cs_image);              \/\/\u8fdb\u5165\u4e34\u754c\u533a\r\n SetWorkingImage(&amp;image);\r\n getimage(&amp;temp,x,y,width,height);\r\n SetWorkingImage(NULL);\r\n LeaveCriticalSection(&amp;cs_image);              \/\/\u79bb\u5f00\u4e34\u754c\u533a\r\n putimage(x,y,&amp;temp);\r\n}\r\n\r\n#endif    \/\/_GUI_H_\r\n\r\n\/*------------------------------------stack.h----------------------------------------------*\/\r\n\r\n#ifndef _STACK_H_\r\n#define _STACK_H_\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include \"global.h\"\r\n#include \"GUI.h\"\r\n\r\nint InitStack(Stack *S)\r\n{\r\n if(S-&gt;base!=NULL) return 1;                                                  \/\/\u6808\u7ed3\u6784\u5df2\u5b58\u5728,\u4e0d\u9700\u8981\u518d\u521b\u9020\r\n S-&gt;base=S-&gt;top=(STACK_DATATYPE *)malloc(sizeof(STACK_DATATYPE)*5);           \/\/\u521d\u59cb\u5316\u5bb9\u91cf\u4e3a5\u7684\u6808\r\n if(S-&gt;base==NULL)\r\n {\r\n  print(\"malloc error.\",RED);\r\n  return 0;\r\n }\r\n S-&gt;stacksize=5;\r\n\r\n return 1;\r\n}\r\n\r\nint Push(Stack *S,STACK_DATATYPE elem)\r\n{\r\n if(S-&gt;top-S-&gt;base==S-&gt;stacksize-1)\r\n {\r\n  \/\/\u9700\u8981\u4e3a\u6808\u7533\u8bf7\u65b0\u7684\u5b58\u50a8\u7a7a\u95f4\r\n  S-&gt;base=(STACK_DATATYPE *)realloc(S-&gt;base,sizeof(STACK_DATATYPE)*++S-&gt;stacksize);\r\n  if(S-&gt;base==NULL)\r\n  {\r\n   print(\"\u7533\u8bf7\u65b0\u7684\u6808\u7a7a\u95f4\u5931\u8d25.\",RED);\r\n   return 0;\r\n  }\r\n  S-&gt;top=S-&gt;base+(S-&gt;stacksize-2);\r\n }\r\n *S-&gt;top=elem;           \/\/\u6570\u636e\u5165\u6808\r\n S-&gt;top++;               \/\/\u6808\u9876\u6307\u9488\u5411\u540e\u79fb\r\n return 1;\r\n}\r\n\r\nint StackEmpty(Stack *S)\r\n{\r\n return S-&gt;top-S-&gt;base==0?1:0;\r\n}\r\n\r\nint Pop(Stack *S,STACK_DATATYPE *elem)\r\n{\r\n if(StackEmpty(S)) return 0;      \/\/\u6808\u5df2\u7a7a\r\n S-&gt;top--;                        \/\/\u6808\u9876\u6307\u9488\u5411\u524d\u79fb\u52a8\u4e00\u5355\u4f4d\r\n *elem=*S-&gt;top;                   \/\/\u6808\u9876\u5143\u7d20\u51fa\u6808\r\n return 1;\r\n}\r\n\r\n#endif    \/\/_STACK_H_\r\n\r\n\r\n\/*------------------------------------queue.h----------------------------------------------*\/\r\n\r\n\r\n#ifndef _QUEUE_H_\r\n#define _QUEUE_H_\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include \"global.h\"\r\n#include \"AVL.h\"\r\n#include \"GUI.h\"\r\n\r\nint EnQueue(Queue *Q,QUEUE_DATATYPE elem)\r\n{\r\n QNode *tmp=NULL;\r\n\r\n tmp=(QNode *)malloc(sizeof(QNode));\r\n if(tmp==NULL)\r\n {\r\n  print(\"\u7533\u8bf7\u961f\u5217\u7a7a\u95f4\u5931\u8d25.\",RED);\r\n  return 0;\r\n }\r\n memset(tmp,NULL,sizeof(QNode));\r\n if(Q-&gt;start==NULL)\r\n {\r\n  Q-&gt;start=Q-&gt;end=tmp;\r\n }\r\n else\r\n {\r\n  Q-&gt;end-&gt;next=tmp;\r\n  Q-&gt;end=tmp;\r\n }\r\n Q-&gt;end-&gt;data=elem;\r\n Q-&gt;queuesize++;\r\n\r\n return 1;\r\n}\r\n\r\nint DeQueue(Queue *Q,QUEUE_DATATYPE *elem)\r\n{\r\n QNode *tmp=NULL;\r\n\r\n if(Q-&gt;start==NULL || Q-&gt;queuesize==0) return 0;     \/\/\u961f\u5217\u5df2\u7a7a\r\n *elem=Q-&gt;start-&gt;data;\r\n Q-&gt;queuesize--;\r\n tmp=Q-&gt;start;\r\n Q-&gt;start=Q-&gt;start-&gt;next;\r\n free(tmp);\r\n\r\n return 1;\r\n}\r\n\r\n\r\n#endif       \/\/_QUEUE_H_\r\n\r\n\/*------------------------------------AVL.h----------------------------------------------*\/\r\n\r\n\r\n#ifndef _AVL_H_\r\n#define _AVL_H_\r\n\r\n#include &lt;windows.h&gt;\r\n#include &lt;string.h&gt;\r\n\r\n#include \"global.h\"\r\n#include \"FileOper.h\"\r\n#include \"stack.h\"\r\n#include \"GUI.h\"\r\n\r\nint Depth(AVL *root)\r\n{\r\n \/\/\u8ba1\u7b97\u6811\u7684\u6df1\u5ea6\u3002\r\n if(root==NULL)\r\n  return 0;\r\n int i,j;\r\n\r\n if(root-&gt;left)\r\n  i=Depth(root-&gt;left);\r\n else\r\n  i=0;\r\n\r\n if(root-&gt;right)\r\n  j=Depth(root-&gt;right);\r\n else\r\n  j=0;\r\n\r\n return i&gt;j?i+1:j+1;\r\n}\r\n\r\nvoid updateBF(AVL *NewNode)\r\n{\r\n \/\/\u66f4\u65b0\u5e73\u8861\u56e0\u5b50\r\n if(!NewNode || !NewNode-&gt;father) return;\r\n AVL *CurrNode=NewNode;\r\n AVL *PreNode=CurrNode-&gt;father;\r\n\r\n if(CurrNode==PreNode-&gt;left)\r\n {\r\n  \/\/\u6307\u9488\u4ece\u5de6\u8def\u56de\u6eaf\r\n  PreNode-&gt;balance++;\r\n  if(PreNode-&gt;balance==2) return;\r\n  if(PreNode-&gt;left &amp;&amp; PreNode-&gt;right)   \/\/\u9047\u5230\u6709\u4e24\u4e2a\u5b69\u5b50\u7684\u8282\u70b9\r\n   if(PreNode-&gt;balance&lt;=0)\r\n    return;\r\n }\r\n else\r\n {\r\n  \/\/\u6307\u9488\u4ece\u53f3\u8def\u56de\u6eaf\r\n  PreNode-&gt;balance--;\r\n  if(PreNode-&gt;balance==-2) return;\r\n  if(PreNode-&gt;left &amp;&amp; PreNode-&gt;right)\r\n   if(PreNode-&gt;balance&gt;=0)\r\n    return;\r\n }\r\n updateBF(PreNode);\r\n\r\n return;\r\n}\r\n\r\nvoid RR_Rotate(AVL **root,AVL *centreNode)\r\n{\r\n \/\/\u5411\u53f3\u65cb\u8f6c,RR\u578b\u3002\r\n AVL *temp=NULL;\r\n\r\n if(centreNode-&gt;right)\r\n {\r\n  \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u53f3\u8282\u70b9\u4e0d\u4e3a\u7a7a\r\n  centreNode-&gt;father-&gt;left=centreNode-&gt;right;     \/\/\u5c06\u4e2d\u5fc3\u8282\u70b9\u7684\u53f3\u5b50\u6811\u8fde\u63a5\u5230\u53cc\u4eb2\u8282\u70b9\u7684\u5de6\u5b50\u6811\u4e0a\u3002\r\n  centreNode-&gt;right-&gt;father=centreNode-&gt;father;\r\n }\r\n else\r\n  \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u53f3\u8282\u70b9\u4e3a\u7a7a\r\n  centreNode-&gt;father-&gt;left=NULL;\r\n\r\n temp=centreNode-&gt;father-&gt;father;\r\n if(centreNode-&gt;father-&gt;father!=NULL)\r\n  if(centreNode-&gt;father-&gt;father-&gt;left==centreNode-&gt;father)\r\n   centreNode-&gt;father-&gt;father-&gt;left=centreNode;\r\n  else\r\n   centreNode-&gt;father-&gt;father-&gt;right=centreNode;\r\n else\r\n  *root=centreNode;\r\n\r\n centreNode-&gt;right=centreNode-&gt;father;         \/\/\u5f53\u524d\u8282\u70b9\u7684\u53cc\u4eb2\u6210\u4e3a\u5176\u53f3\u5b50\u6811\u3002\r\n centreNode-&gt;father-&gt;father=centreNode;\r\n centreNode-&gt;father-&gt;balance-=2;\r\n centreNode-&gt;father=temp;\r\n centreNode-&gt;balance--;\r\n\r\n return;\r\n}\r\n\r\nvoid LL_Rotate(AVL **root,AVL *centreNode)\r\n{\r\n \/\/\u5411\u5de6\u65cb\u8f6c,LL\u578b\r\n AVL *temp=NULL;\r\n\r\n if(centreNode-&gt;left)\r\n {\r\n  \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u8282\u70b9\u4e0d\u4e3a\u7a7a\r\n  centreNode-&gt;father-&gt;right=centreNode-&gt;left;    \/\/\u5c06\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u5b50\u6811\u8fde\u63a5\u5230\u53cc\u4eb2\u7684\u53f3\u5b50\u6811\u4e0a\u3002\r\n  centreNode-&gt;left-&gt;father=centreNode-&gt;father;   \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u5b50\u6811\u7684\u53cc\u4eb2\u6539\u4e3a\u4e2d\u5fc3\u8282\u70b9\u7684\u53cc\u4eb2\u3002\r\n }\r\n else\r\n  centreNode-&gt;father-&gt;right=NULL;\r\n\r\n temp=centreNode-&gt;father-&gt;father;\r\n if(centreNode-&gt;father-&gt;father!=NULL)\r\n  if(centreNode-&gt;father-&gt;father-&gt;left==centreNode-&gt;father)\r\n   centreNode-&gt;father-&gt;father-&gt;left=centreNode;\r\n  else\r\n   centreNode-&gt;father-&gt;father-&gt;right=centreNode;\r\n else\r\n  *root=centreNode;\r\n\r\n centreNode-&gt;left=centreNode-&gt;father;         \/\/\u5c06\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u5b69\u5b50\u6539\u4e3a\u4e2d\u5fc3\u8282\u70b9\u7684\u53cc\u4eb2\r\n centreNode-&gt;left-&gt;father=centreNode;         \/\/\u5c06\u4e2d\u5fc3\u8282\u70b9\u5de6\u5b69\u5b50\u7684\u53cc\u4eb2\u66f4\u6539\u4e3a\u4e2d\u5fc3\u8282\u70b9\u3002\r\n centreNode-&gt;balance++;\r\n centreNode-&gt;father-&gt;balance+=2;\r\n centreNode-&gt;father=temp;\r\n\r\n return;\r\n}\r\n\r\nvoid RL_Rotate(AVL **root,AVL *centreNode)\r\n{\r\n \/\/\u5148\u53f3\u540e\u5de6\u65cb\u8f6c\r\n AVL *temp=NULL;\r\n\r\n temp=centreNode-&gt;father;\r\n centreNode-&gt;father-&gt;right=centreNode-&gt;left;\r\n centreNode-&gt;left-&gt;father=centreNode-&gt;father;\r\n centreNode-&gt;left-&gt;balance--;\r\n centreNode-&gt;balance--;\r\n\r\n if(centreNode-&gt;left-&gt;right)\r\n {\r\n  \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u8282\u70b9\u7684\u53f3\u5b69\u5b50\u4e0d\u4e3a\u7a7a\u3002\r\n  temp-&gt;right-&gt;right-&gt;father=centreNode;\r\n }\r\n centreNode-&gt;left=temp-&gt;right-&gt;right;\r\n temp-&gt;right-&gt;right=centreNode;\r\n centreNode-&gt;father=temp-&gt;right;\r\n if(temp-&gt;right-&gt;balance==-2)\r\n  temp-&gt;right-&gt;balance++;\r\n LL_Rotate(root,temp-&gt;right);\r\n\r\n return;\r\n}\r\n\r\nvoid LR_Rotate(AVL **root,AVL *centreNode)\r\n{\r\n \/\/\u5148\u5de6\u540e\u53f3\u65cb\u8f6c\uff0cLR\u578b\u3002\r\n AVL *temp=NULL;\r\n\r\n temp=centreNode-&gt;father;\r\n centreNode-&gt;father-&gt;left=centreNode-&gt;right;\r\n centreNode-&gt;right-&gt;father=centreNode-&gt;father;\r\n centreNode-&gt;right-&gt;balance++;\r\n centreNode-&gt;balance++;\r\n\r\n if(centreNode-&gt;right-&gt;left)\r\n {\r\n  \/\/\u4e2d\u5fc3\u8282\u70b9\u7684\u5de6\u8282\u70b9\u7684\u53f3\u5b69\u5b50\u4e0d\u4e3a\u7a7a\u3002\r\n  temp-&gt;left-&gt;left-&gt;father=centreNode;\r\n }\r\n centreNode-&gt;right=temp-&gt;left-&gt;left;\r\n temp-&gt;left-&gt;left=centreNode;\r\n centreNode-&gt;father=temp-&gt;left;\r\n if(temp-&gt;left-&gt;balance==2)\r\n  temp-&gt;left-&gt;balance--;\r\n RR_Rotate(root,temp-&gt;left);\r\n\r\n return;\r\n}\r\n\r\nvoid adjustAVL(AVL **root,AVL *NewNode)\r\n{\r\n if(!NewNode) return;\r\n AVL *CurrNode=NewNode;\r\n AVL *PreNode=NULL;\r\n\r\n while(CurrNode-&gt;father!=NULL &amp;&amp; CurrNode-&gt;father-&gt;balance!=2 &amp;&amp; CurrNode-&gt;father-&gt;balance!=-2)\r\n {\r\n  PreNode=CurrNode;\r\n  CurrNode=CurrNode-&gt;father;\r\n }\r\n if(!CurrNode-&gt;father) return;\r\n\r\n if(CurrNode-&gt;father-&gt;left==CurrNode)\r\n {\r\n  \/\/\u81ea\u5df1\u662f\u53cc\u4eb2\u7684\u5de6\u8282\u70b9\r\n  if(CurrNode-&gt;left==PreNode)\r\n   \/\/\u6307\u9488\u4ece\u5de6\u8def\u56de\u6eaf\u3002\r\n    RR_Rotate(root,CurrNode);\r\n  else\r\n   \/\/\u6307\u9488\u4ece\u53f3\u8def\u56de\u6eaf\r\n   LR_Rotate(root,CurrNode);\r\n }\r\n else\r\n {\r\n  \/\/\u81ea\u5df1\u662f\u53cc\u4eb2\u7684\u53f3\u8282\u70b9\r\n  if(CurrNode-&gt;right==PreNode)\r\n   \/\/\u6307\u9488\u4ece\u53f3\u8def\u56de\u6eaf\r\n    LL_Rotate(root,CurrNode);\r\n  else\r\n   \/\/\u6307\u9488\u4ece\u5de6\u8def\u56de\u6eaf\r\n   RL_Rotate(root,CurrNode);\r\n }\r\n\r\n return;\r\n}\r\n\r\nint InsertIndex(AVL **root,INDEXDATA *elem)\r\n{\r\n AVL *CurrNode=NULL;\r\n AVL *PreNode=NULL;\r\n AVL *NewNode=NULL;\r\n\r\n if(*root==NULL)                  \/\/\u5982\u679c\u6839\u8282\u70b9\u4e0d\u5b58\u5728\u5219\u521b\u5efa\r\n {\r\n  if((*root=(AVL *)malloc(sizeof(AVL)))==NULL)\r\n   return 0;\r\n  memset(*root,NULL,sizeof(AVL));\r\n  elem-&gt;Count=1;               \/\/\u6b64ASCII\u548c\u7684\u8bcd\u6761\u4e2a\u6570\r\n  (*root)-&gt;data=*elem;\r\n  return 1;\r\n }\r\n\r\n CurrNode=*root;\r\n while(CurrNode)\r\n {\r\n  PreNode=CurrNode;\r\n  if(elem-&gt;ASCII&lt;CurrNode-&gt;data.ASCII)\r\n   CurrNode=CurrNode-&gt;left;\r\n  else if(elem-&gt;ASCII&gt;CurrNode-&gt;data.ASCII)\r\n   CurrNode=CurrNode-&gt;right;\r\n  else\r\n  {\r\n   \/\/\u5df2\u5b58\u5728\u8be5\u7d22\u5f15\r\n   CurrNode-&gt;data.Count++;                  \/\/\u6b64\u7c7b\u578b\u7684\u8bcd\u6761\u4e2a\u6570\u52a0\u4e00\r\n   elem-&gt;Start=CurrNode-&gt;data.Start;\r\n   elem-&gt;Count=CurrNode-&gt;data.Count;\r\n   return 2;    \/\/\u8868\u793a\u5df2\u5b58\u5728\u8be5\u5143\u7d20\r\n  }\r\n }\r\n \/\/\u7d22\u5f15\u4e2d\u65e0\u6b64\u8282\u70b9\uff0c\u6dfb\u52a0\u65b0\u7684\u8282\u70b9\u3002\r\n if((NewNode=(AVL *)malloc(sizeof(AVL)))==NULL)        \/\/\u4e3a\u65b0\u8282\u70b9\u5f00\u8f9f\u7a7a\u95f4\r\n  return 0;\r\n memset(NewNode,NULL,sizeof(AVL));                     \/\/\u521d\u59cb\u5316\u65b0\u8282\u70b9\u4e2d\u7684\u6570\u636e\r\n if(GetFileSizeEx(hDataFile,&amp;DataFileSize)!=TRUE)      \/\/\u83b7\u53d6\u6570\u636e\u5e93\u6587\u4ef6\u603b\u5927\u5c0f\r\n  return 0;\r\n elem-&gt;Start=DataFileSize;                             \/\/\u5c06\u65b0\u6dfb\u52a0\u7684\u8bcd\u6761\u8ffd\u52a0\u5230\u6570\u636e\u5e93\u6587\u4ef6\u5c3e\u90e8\r\n elem-&gt;Count=1;                                        \/\/\u6b64\u7c7b\u578b\u7684\u8bcd\u6761\u6570\u76ee\u4e3a\u4e00\r\n NewNode-&gt;data=*elem;                                  \/\/\u4e3a\u65b0\u8282\u70b9\u8d4b\u503c\r\n NewNode-&gt;father=PreNode;\r\n \/\/\u63d2\u5165\u65b0\u8282\u70b9\r\n if(elem-&gt;ASCII&lt;PreNode-&gt;data.ASCII)\r\n  PreNode-&gt;left=NewNode;\r\n else\r\n  PreNode-&gt;right=NewNode;\r\n updateBF(NewNode);          \/\/\u66f4\u65b0AVL\u7684\u5e73\u8861\u56e0\u5b50\r\n adjustAVL(root,NewNode);    \/\/AVL\u81ea\u8c03\u8282\r\n\r\n return 1;\r\n}\r\n\r\nint InsertIndexFromFile(AVL **root,INDEXDATA *elem)\r\n{\r\n AVL *CurrNode=NULL;\r\n AVL *PreNode=NULL;\r\n AVL *NewNode=NULL;\r\n\r\n if(*root==NULL)  \/\/\u5982\u679c\u6839\u8282\u70b9\u4e0d\u5b58\u5728\u5219\u521b\u5efa\r\n {\r\n  if((*root=(AVL *)malloc(sizeof(AVL)))==NULL)\r\n   return 0;\r\n  memset(*root,NULL,sizeof(AVL));\r\n  (*root)-&gt;data=*elem;\r\n  return 1;\r\n }\r\n\r\n CurrNode=*root;\r\n while(CurrNode)\r\n {\r\n  PreNode=CurrNode;\r\n  if(elem-&gt;ASCII&lt;CurrNode-&gt;data.ASCII)\r\n   CurrNode=CurrNode-&gt;left;\r\n  else if(elem-&gt;ASCII&gt;CurrNode-&gt;data.ASCII)\r\n   CurrNode=CurrNode-&gt;right;\r\n  else\r\n  {\r\n   \/\/\u5df2\u5b58\u5728\u8be5\u7d22\u5f15\r\n   return 2;    \/\/\u8868\u793a\u5df2\u5b58\u5728\u8be5\u5143\u7d20\r\n  }\r\n }\r\n \/\/\u7d22\u5f15\u4e2d\u65e0\u6b64\u8282\u70b9\uff0c\u6dfb\u52a0\u65b0\u7684\u8282\u70b9\u3002\r\n if((NewNode=(AVL *)malloc(sizeof(AVL)))==NULL)       \/\/\u4e3a\u65b0\u8282\u70b9\u5f00\u8f9f\u7a7a\u95f4\r\n  return 0;\r\n memset(NewNode,NULL,sizeof(AVL));                    \/\/\u521d\u59cb\u5316\u65b0\u8282\u70b9\u4e2d\u7684\u6570\u636e\r\n NewNode-&gt;data=*elem;                                 \/\/\u4e3a\u65b0\u8282\u70b9\u8d4b\u503c\r\n NewNode-&gt;father=PreNode;\r\n \/\/\u63d2\u5165\u65b0\u8282\u70b9\r\n if(elem-&gt;ASCII&lt;PreNode-&gt;data.ASCII)\r\n  PreNode-&gt;left=NewNode;\r\n else\r\n  PreNode-&gt;right=NewNode;\r\n updateBF(NewNode);          \/\/\u66f4\u65b0AVL\u7684\u5e73\u8861\u56e0\u5b50\r\n adjustAVL(root,NewNode);    \/\/AVL\u81ea\u8c03\u8282\r\n\r\n return 1;\r\n}\r\n\r\nint AlterIndexStartAddr(AVL *root,const LARGE_INTEGER *refer,int pattern)\r\n{\r\n \/\/\u4e2d\u5e8f\u904d\u5386,\u7b2c\u4e09\u4e2a\u53c2\u6570:0.\u6709\u8bcd\u6761\u88ab\u6dfb\u52a0.1.\u6709\u8bcd\u6761\u88ab\u5220\u9664.\r\n if(root==NULL)\r\n  return 0;\r\n AlterIndexStartAddr(root-&gt;left,refer,pattern);\r\n\r\n if(root-&gt;data.Start.QuadPart&gt;refer-&gt;QuadPart)\r\n {\r\n  if(pattern==0)\r\n  {\r\n   \/\/\u6709\u8bcd\u6761\u88ab\u6dfb\u52a0,\u90e8\u5206\u7d22\u5f15\u8d77\u59cb\u5730\u5740\u540e\u79fb.\r\n   root-&gt;data.Start.QuadPart+=sizeof(WORD_INFO);    \/\/\u4fee\u6539\u5176\u4ed6\u8bcd\u6761\u7d22\u5f15\u7684\u8d77\u59cb\u5730\u5740\r\n  }\r\n  else\r\n  {\r\n   \/\/\u6709\u8bcd\u6761\u88ab\u5220\u9664,\u90e8\u5206\u7d22\u5f15\u8d77\u59cb\u5730\u5740\u524d\u79fb\r\n   root-&gt;data.Start.QuadPart-=sizeof(WORD_INFO);\r\n  }\r\n  InsertIndexToFile(root-&gt;data,0);                 \/\/\u5c06\u4fee\u6539\u7ed3\u679c\u5b58\u5165\u6587\u4ef6\u4e2d\r\n }\r\n\r\n AlterIndexStartAddr(root-&gt;right,refer,pattern);\r\n return 1;\r\n}\r\n\r\nINDEXDATA *SearchAVL(AVL *root,int ASCII)\r\n{\r\n INDEXDATA *result=NULL;\r\n\r\n if(!root) return NULL;\r\n if(ASCII==root-&gt;data.ASCII) return &amp;root-&gt;data;\r\n if(ASCII&lt;root-&gt;data.ASCII)\r\n  if((result=SearchAVL(root-&gt;left,ASCII))) return result;\r\n if(ASCII&gt;root-&gt;data.ASCII)\r\n  if((result=SearchAVL(root-&gt;right,ASCII))) return result;\r\n\r\n return NULL;\r\n}\r\n\r\nint PushAVLToStack(Stack *S,AVL *root)\r\n{\r\n \/\/\u5148\u5e8f\u904d\u5386\u5165\u6808\r\n if(!root) return 0;\r\n\r\n Push(S,root);\r\n if(root-&gt;left)\r\n  PushAVLToStack(S,root-&gt;left);\r\n if(root-&gt;right)\r\n  PushAVLToStack(S,root-&gt;right);\r\n\r\n return 1;\r\n}\r\n\r\nint DestroyAVL(AVL *root)\r\n{\r\n AVL *tmp=NULL;\r\n\r\n if(!InitStack(&amp;S))             \/\/\u521d\u59cb\u5316\u6808\r\n {\r\n  print(\"\u521d\u59cb\u5316\u6808\u5931\u8d25.\",RED);\r\n  return 0;\r\n }\r\n PushAVLToStack(&amp;S,root);      \/\/AVL\u6240\u6709\u8282\u70b9\u6307\u9488\u5165\u6808\r\n AVL_ROOT=NULL;                \/\/AVL\u6839\u6307\u9488\u7f6e\u7a7a\r\n while(!StackEmpty(&amp;S))\r\n {\r\n  Pop(&amp;S,&amp;tmp);             \/\/\u6307\u9488\u53d8\u91cf\u51fa\u6808\r\n  free(tmp);                \/\/\u91ca\u653e\u5185\u5b58\r\n }\r\n return 1;\r\n}\r\n\r\nint NodeCount(AVL *root)\r\n{\r\n \/\/\u7edf\u8ba1\u6811\u4e2d\u6709\u591a\u5c11\u4e2a\u8282\u70b9\r\n int n=0;\r\n if(root==NULL)\r\n  return 0;\r\n n=NodeCount(root-&gt;left);\r\n n++;\r\n n+=NodeCount(root-&gt;right);\r\n return n;\r\n}\r\n\r\nint WordCount(AVL *root)\r\n{\r\n \/\/\u7edf\u8ba1\u7d22\u5f15\u5305\u542b\u4e86\u591a\u5c11\u4e2a\u8bcd\u6761\r\n int n=0;\r\n if(root==NULL)\r\n  return 0;\r\n n=WordCount(root-&gt;left);\r\n n+=root-&gt;data.Count;\r\n n+=WordCount(root-&gt;right);\r\n return n;\r\n}\r\n\r\n#endif          \/\/_AVL_H_\r\n\r\n \r\n\r\n \r\n\r\n\r\n\/*------------------------------------FileOper.h----------------------------------------------*\/\r\n\r\n\r\n#ifndef _FILEOPER_H_\r\n#define _FILEOPER_H_\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include \"unicode.h\"\r\n#include \"global.h\"\r\n#include \"GUI.h\"\r\n\r\nint CreateDataFile()\r\n{\r\n hDataFile=CreateFile(CharToTCHAR(DataFilePath),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,\\\r\n  FILE_ATTRIBUTE_NORMAL,NULL);\r\n if(hDataFile==INVALID_HANDLE_VALUE)\r\n {\r\n  print(\"\u521b\u5efa\u6570\u636e\u5e93\u6587\u4ef6\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n return 1;\r\n}\r\n\r\nint CreateIndexFile()\r\n{\r\n hIndexFile=CreateFile(CharToTCHAR(IndexFilePath),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,\\\r\n  FILE_ATTRIBUTE_NORMAL,NULL);\r\n if(hIndexFile==INVALID_HANDLE_VALUE)\r\n {\r\n  print(\"\u521b\u5efa\u7d22\u5f15\u6587\u4ef6\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n return 1;\r\n}\r\n\r\nint OpenDataFile()\r\n{\r\n hDataFile=CreateFile(CharToTCHAR(DataFilePath),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,\\\r\n  FILE_ATTRIBUTE_NORMAL,NULL);\r\n if(hIndexFile==INVALID_HANDLE_VALUE)\r\n {\r\n  printf(\"\u6570\u636e\u5e93\u6587\u4ef6\u6253\u5f00\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n return 1;\r\n}\r\n\r\nint OpenIndexFile()\r\n{\r\n hIndexFile=CreateFile(CharToTCHAR(IndexFilePath),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,\\\r\n  FILE_ATTRIBUTE_NORMAL,NULL);\r\n if(hIndexFile==INVALID_HANDLE_VALUE)\r\n {\r\n  print(\"\u7d22\u5f15\u6587\u4ef6\u6253\u5f00\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n return 1;\r\n}\r\n\r\nint InsertDataToFile(WORD_INFO word,INDEXDATA index)\r\n{\r\n DWORD tmp_dw;\r\n WORD_INFO temp;\r\n LARGE_INTEGER MovSize;\r\n\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n MovSize.QuadPart=index.Start.QuadPart+sizeof(WORD_INFO)*(index.Count-1);     \/\/\u5373\u5c06\u5199\u5165\u65b0\u8bcd\u6761\u7684\u5730\u5740\r\n\r\n GetFileSizeEx(hDataFile,&amp;DataFileSize);                                      \/\/\u83b7\u53d6\u5f53\u524d\u6570\u636e\u5e93\u6587\u4ef6\u7684\u5927\u5c0f\r\n if(DataFileSize.QuadPart!=MovSize.QuadPart)\r\n {\r\n  \/\/\u8981\u63d2\u5165\u7684\u8bcd\u6761\u4e0d\u5728\u6570\u636e\u5e93\u6587\u4ef6\u7684\u5c3e\u90e8\r\n  do\r\n  {\r\n   DataFileSize.QuadPart-=sizeof(WORD_INFO);                         \/\/\u5c06\u6587\u4ef6\u5185\u90e8\u4f4d\u7f6e\u6307\u9488\u79fb\u81f3\u6700\u540e\u4e00\u4e2a\u8bcd\u6761\u7684\u5f00\u59cb\u5904\r\n   DataFileSize.LowPart=SetFilePointer(hDataFile,DataFileSize.LowPart,&amp;DataFileSize.HighPart,FILE_BEGIN);\r\n   ReadFile(hDataFile,&amp;temp,sizeof(WORD_INFO),&amp;tmp_dw,NULL);         \/\/\u8bfb\u51fa\u6b64\u8bcd\u6761\r\n   WriteFile(hDataFile,&amp;temp,sizeof(WORD_INFO),&amp;tmp_dw,NULL);\r\n  }while(DataFileSize.QuadPart!=MovSize.QuadPart);\r\n }\r\n\r\n MovSize.LowPart=SetFilePointer(hDataFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);      \/\/\u6587\u4ef6\u5185\u90e8\u4f4d\u7f6e\u6307\u9488\u79fb\u81f3\u5c06\u8981\u8ffd\u52a0\u7684\u4f4d\u7f6e\r\n WriteFile(hDataFile,&amp;word,sizeof(WORD_INFO),&amp;tmp_dw,NULL);\r\n\r\n return 1;\r\n}\r\n\r\nint InsertIndexToFile(INDEXDATA IndexNode,int choose)\r\n{\r\n \/\/\u7b2c\u4e8c\u4e2a\u53c2\u65701\u8868\u793a\u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u65b0\u7d22\u5f15,0\u8868\u793a\u4fee\u6539\u67d0\u4e00\u7d22\u5f15\u503c.\r\n int n=0;\r\n DWORD tmp_dw;\r\n LARGE_INTEGER MovSize;\r\n INDEXDATA ReadBuff;\r\n\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n\r\n if(choose==0)\r\n {\r\n  \/\/\u8868\u660e\u6b64\u65f6\u662f\u8981\u4fee\u6539\u7d22\u5f15\u6587\u4ef6\u4e2d\u67d0\u7d22\u5f15\r\n  SetFilePointer(hIndexFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);           \/\/\u6587\u4ef6\u5185\u90e8\u4f4d\u7f6e\u6307\u9488\u6307\u5411\u8d77\u59cb\u4f4d\u7f6e\r\n  while(1)\r\n  {\r\n   if(!ReadFile(hIndexFile,&amp;ReadBuff,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n    return 0;\r\n   if(tmp_dw&lt;1) break;\r\n   if(ReadBuff.ASCII==IndexNode.ASCII)\r\n   {\r\n    memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));                  \/\/\u521d\u59cb\u5316\u4f4d\u79fb\u53d8\u91cf\r\n    MovSize.QuadPart=n*sizeof(INDEXDATA);                         \/\/\u5411\u540e\u79fb\u52a8\u4e00\u4e2a\u7d22\u5f15\u8282\u70b9\u7684\u957f\u5ea6\r\n    SetFilePointerEx(hIndexFile,MovSize,NULL,FILE_BEGIN);         \/\/\u7b2c\u4e09\u4e2a\u53c2\u6570\u8fd4\u56de\u79fb\u52a8\u540e\u7684\u4f4d\u7f6e\r\n    break;\r\n   }\r\n   n++;\r\n   memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n  }\r\n }\r\n else\r\n {\r\n  \/\/\u5c06\u65b0\u7684\u7d22\u5f15\u6570\u636e\u8ffd\u52a0\u5230\u7d22\u5f15\u6587\u4ef6\u7684\u5c3e\u90e8\r\n  MovSize.LowPart=SetFilePointer(hIndexFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_END);             \/\/\u5c06\u6587\u4ef6\u5185\u90e8\u6307\u9488\u79fb\u81f3\u6587\u4ef6\u672b\u5c3e\r\n }\r\n if(!WriteFile(hIndexFile,(LPCVOID)&amp;IndexNode,sizeof(INDEXDATA),&amp;tmp_dw,NULL))         \/\/\u5c06\u65b0\u7684\u7d22\u5f15\u8282\u70b9\u5199\u5165\u6587\u4ef6\r\n  return 0;\r\n\r\n return 1;\r\n}\r\n\r\n#endif     \/\/_FILEOPER_H_\r\n\r\n\/*------------------------------------FileOper.h----------------------------------------------*\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;windows.h&gt;\r\n#include \"global.h\"\r\n#include \"FileOper.h\"\r\n#include \"AVL.h\"\r\n#include \"queue.h\"\r\n#include \"GUI.h\"\r\n\r\nint ASCII_SUM(char *str);\r\nint AdjustIndex(INDEXDATA _index);\r\nint Query_Word(char *word,WORD_INFO *WI,LARGE_INTEGER *PCurrSize);\r\nint Query();\r\nint Add_Word();\r\nint Alter_Word(LARGE_INTEGER CurrSize,WORD_INFO *WI);\r\nint Delete_Word(LARGE_INTEGER CurrSize);\r\nint Delete_Index(int ascii);\r\nint OptimizeIndexFile();\r\nvoid ShowFile();\r\n\r\nint ASCII_SUM(char *str)\r\n{\r\n int sum=0;\r\n char *p=str;\r\n\r\n for(sum=0;*p!=NULL;p++)\r\n  sum+=(int)*p;           \/\/\u8ba1\u7b97\u5355\u8bcd\u7684ASCII\u548c\r\n return sum;\r\n}\r\n\r\nint AdjustIndex(INDEXDATA _index)\r\n{\r\n DWORD tmp_dw;\r\n LARGE_INTEGER ReferSize;\r\n\r\n memset(&amp;ReferSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n InsertIndexToFile(_index,0);                 \/\/\u5148\u4fee\u6539\u65b0\u8bcd\u6761\u7684\u7d22\u5f15\r\n ReferSize=_index.Start;\r\n AlterIndexStartAddr(AVL_ROOT,&amp;ReferSize,0);\r\n\r\n return 1;\r\n}\r\n\r\nint Query_Word(char *word,WORD_INFO *WI,LARGE_INTEGER *PCurrSize)\r\n{\r\n \/\/\u8fd4\u56de\u503c:1.\u67e5\u8be2\u6210\u529f\u30020.\u6b64\u8bcd\u6761\u672a\u88ab\u6536\u5f55\u3002-1.\u67e5\u8be2\u51fa\u9519\u3002\r\n int word_ascii,n;\r\n DWORD tmp_dw;\r\n INDEXDATA *pIndex=NULL;\r\n WORD_INFO ReadBuff;\r\n LARGE_INTEGER MovSize,CurrSize;\r\n\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;CurrSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n word_ascii=ASCII_SUM(word);                \/\/\u5148\u8ba1\u7b97\u51fa\u8981\u67e5\u627e\u8bcd\u8bed\u7684ASCII\u7801\u4e4b\u548c\r\n if((pIndex=SearchAVL(AVL_ROOT,word_ascii))==NULL)\r\n  return 0;                              \/\/\u6b64\u8bcd\u8bed\u672a\u88ab\u6536\u5f55\r\n MovSize=pIndex-&gt;Start;\r\n MovSize.LowPart=SetFilePointer(hDataFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);    \/\/\u6587\u4ef6\u5185\u90e8\u6307\u9488\u79fb\u81f3\u6b64\u7c7b\u8bcd\u6761\u5f00\u59cb\u7684\u4f4d\u7f6e\r\n for(n=pIndex-&gt;Count;n!=0;n--)\r\n {\r\n  memset(&amp;ReadBuff,NULL,sizeof(WORD_INFO));\r\n  if(!ReadFile(hDataFile,&amp;ReadBuff,sizeof(WORD_INFO),&amp;tmp_dw,NULL))\r\n   return -1;\r\n  if(!strcmp(ReadBuff.word,word))\r\n  {\r\n   \/\/\u67e5\u8be2\u5230\u6b64\u5355\u8bcd\r\n   if(WI!=NULL)\r\n    memcpy(WI,&amp;ReadBuff,sizeof(WORD_INFO));\r\n   if(PCurrSize!=NULL)\r\n   {\r\n    \/\/\u83b7\u53d6\u5f53\u524d\u6587\u4ef6\u5185\u90e8\u6307\u9488\u4f4d\u7f6e\r\n    CurrSize.LowPart=SetFilePointer(hDataFile,CurrSize.LowPart,&amp;CurrSize.HighPart,FILE_CURRENT);\r\n    CurrSize.QuadPart-=sizeof(WORD_INFO);\r\n    memcpy(PCurrSize,&amp;CurrSize,sizeof(LARGE_INTEGER));\r\n   }\r\n   return 1;\r\n  }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nint Query()\r\n{\r\n LARGE_INTEGER CurrSize;\r\n WORD_INFO WI;\r\n int choose;\r\n char ch_temp[50],word[50],result[100];\r\n TCHAR TC_temp[50];\r\n\r\n memset(&amp;WI,NULL,sizeof(WORD_INFO));\r\n memset(word,NULL,sizeof(word));\r\n memset(result,NULL,sizeof(result));\r\n memset(ch_temp,NULL,sizeof(ch_temp));\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,50,_T(\"\u8bf7\u8f93\u5165\u8bcd\u540d\"),_T(\"\u67e5\u627e\u8bcd\u6761\"),NULL,300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memcpy(word,ch_temp,50);\r\n\r\n switch(Query_Word(word,&amp;WI,&amp;CurrSize))\r\n {\r\n case 1:\r\n  sprintf(result,\"\u8bcd\u540d:%s\",WI.word);\r\n  print(result,BLACK);\r\n  memset(result,NULL,sizeof(result));\r\n  sprintf(result,\"\u8bfb\u97f3:%s\",WI.pronunciation);\r\n  print(result,BLACK);\r\n  memset(result,NULL,sizeof(result));\r\n  sprintf(result,\"\u8bcd\u6027:%s\",WI.property);\r\n  print(result,BLACK);\r\n  memset(result,NULL,sizeof(result));\r\n  sprintf(result,\"\u91ca\u4e49:%s\",WI.describe);\r\n  print(result,BLACK);\r\n\r\n  printf(\"1.\u4fee\u6539\\t2.\u5220\u9664\\t0.\u8fd4\u56de\\n\");\r\n\r\n  cover(40,250,150,50);\r\n  cover(40,370,150,50);\r\n  cover(30,500,190,50);\r\n\r\n  settextcolor(GREEN);\r\n  setbkmode(TRANSPARENT);\r\n  settextstyle(15,15,NULL);\r\n  outtextxy(80,270,_T(\"\u4fee\u6539\"));\r\n  outtextxy(80,395,_T(\"\u5220\u9664\"));\r\n  outtextxy(80,525,_T(\"\u8fd4\u56de\"));\r\n  while(!(choose=GetMouse()));\r\n  if(choose==1)\r\n  {\r\n   if(!Alter_Word(CurrSize,&amp;WI))\r\n   {\r\n    print(\"\u8bcd\u6761\u4fee\u6539\u5931\u8d25.\",RED);\r\n   }\r\n   text2_y=222;                  \/\/\u63a7\u5236\u53f0\u6d88\u606f\u8f93\u51fa\u5750\u6807\u521d\u59cb\u5316\r\n   cover(251,222,473,378);\r\n   sprintf(result,\"\u8bcd\u540d:%s\",WI.word);\r\n   print(result,BLACK);\r\n   memset(result,NULL,sizeof(result));\r\n   sprintf(result,\"\u8bfb\u97f3:%s\",WI.pronunciation);\r\n   print(result,BLACK);\r\n   memset(result,NULL,sizeof(result));\r\n   sprintf(result,\"\u8bcd\u6027:%s\",WI.property);\r\n   print(result,BLACK);\r\n   memset(result,NULL,sizeof(result));\r\n   sprintf(result,\"\u91ca\u4e49:%s\",WI.describe);\r\n   print(result,BLACK);\r\n   print(\"\u8bcd\u6761\u4fee\u6539\u6210\u529f.\",GREEN);\r\n  }\r\n  else if(choose==2)\r\n  {\r\n   text2_y=222;                  \/\/\u63a7\u5236\u53f0\u6d88\u606f\u8f93\u51fa\u5750\u6807\u521d\u59cb\u5316\r\n   cover(251,222,473,378);\r\n   if(Delete_Word(CurrSize)!=1)\r\n   {\r\n    print(\"\u5220\u9664\u8bcd\u6761\u5931\u8d25.\",RED);\r\n   }\r\n   else\r\n   {\r\n    memset(result,NULL,sizeof(result));\r\n    sprintf(result,\"\u5df2\u6210\u529f\u5220\u9664\u8bcd\u6761:%s\",WI.word);\r\n    print(result,GREEN);\r\n   }\r\n  }\r\n  break;\r\n case 0:\r\n  print(\"\u4e0d\u5b58\u5728\u6b64\u5355\u8bcd.\",YELLOW);\r\n  return 0;\r\n default:\r\n  print(\"\u67e5\u8be2\u51fa\u9519.\",RED);\r\n  return -1;\r\n }\r\n\r\n return 1;\r\n}\r\n\r\nint Add_Word()\r\n{\r\n int InsertIndexResult=0;\r\n INDEXDATA IndexData;            \/\/AVL\u7d22\u5f15\u8282\u70b9\u6570\u636e\u5185\u5bb9\r\n WORD_INFO word;                 \/\/\u5305\u542b\u6bcf\u4e2a\u5355\u8bcd\u4fe1\u606f\r\n TCHAR TC_temp[100];\r\n char ch_temp[100];\r\n\r\n memset(&amp;IndexData,NULL,sizeof(INDEXDATA));\r\n memset(&amp;word,NULL,sizeof(WORD_INFO));\r\n memset(TC_temp,NULL,sizeof(TC_temp));\r\n memset(ch_temp,NULL,sizeof(ch_temp));\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,50,_T(\"\u8bf7\u8f93\u5165\u8bcd\u540d\"),_T(\"\u6dfb\u52a0\u8bcd\u6761\"),NULL,300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memcpy(word.word,ch_temp,50);\r\n\r\n IndexData.ASCII=ASCII_SUM(word.word);                    \/\/\u8ba1\u7b97\u5355\u8bcdASCII\u548c\r\n \/\/printf(\"\u6b64\u5355\u8bcd\u7684ASCII\u4e4b\u548c\u4e3a:%d\\n\",IndexData.ASCII);\r\n if(Query_Word(word.word,NULL,NULL)==1)\r\n {\r\n  print(\"\u5df2\u6536\u5f55\u6b64\u8bcd\u6761,\u8bf7\u52ff\u91cd\u590d\u6dfb\u52a0.\",RED);\r\n  return 2;\r\n }\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,50,_T(\"\u8bf7\u8f93\u5165\u62fc\u97f3\"),_T(\"\u6dfb\u52a0\u8bcd\u6761\"),NULL,300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memcpy(word.pronunciation,ch_temp,50);\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,20,_T(\"\u8bf7\u8f93\u5165\u8bcd\u6027\"),_T(\"\u6dfb\u52a0\u8bcd\u6761\"),NULL,300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memcpy(word.property,ch_temp,20);\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,100,_T(\"\u8bf7\u8f93\u5165\u91ca\u4e49\"),_T(\"\u6dfb\u52a0\u8bcd\u6761\"),NULL,300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memcpy(word.describe,ch_temp,100);\r\n\r\n if(!(InsertIndexResult=InsertIndex(&amp;AVL_ROOT,&amp;IndexData)))    \/\/\u63d2\u5165\u6216\u4fee\u6539\u7d22\u5f15\u8282\u70b9\r\n {\r\n  \/\/\u7b2c\u4e8c\u4e2a\u53c2\u6570\u8fd4\u56de\u4e86\u65b0\u8bcd\u6761\u5bf9\u5e94\u7684\u7d22\u5f15\u6570\u636e\r\n  printf(\"\u6dfb\u52a0\u7d22\u5f15\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n if(!InsertDataToFile(word,IndexData)) \r\n {\r\n  \/\/\u5c06\u65b0\u7684\u8bcd\u6761\u6dfb\u52a0\u81f3\u6570\u636e\u5e93\u6587\u4ef6\u4e2d,\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u65b0\u8bcd\u6761\u6240\u5bf9\u5e94\u7684\u7d22\u5f15.\r\n  printf(\"\u5199\u6587\u4ef6\u5931\u8d25\u3002\",RED);\r\n  return 0;\r\n }\r\n \/\/\u5f53InsertIndexResult\u8fd4\u56de\u503c\u4e3a1\u65f6\u8868\u660e\u65b0\u6dfb\u52a0\u7684\u8bcd\u6761\u8ffd\u52a0\u5728\u6570\u636e\u5e93\u6587\u4ef6\u672b\u5c3e\uff0c\u4e0d\u9700\u8981\u5bf9\u5168\u90e8\u7d22\u5f15\u8fdb\u884c\u66f4\u65b0\uff0c\u5426\u5219\u9700\u8981\u3002\r\n if(InsertIndexResult==1)\r\n {\r\n  if(!InsertIndexToFile(IndexData,1))         \/\/\u7b2c\u4e8c\u4e2a\u53c2\u65701\u8868\u793a\u65b0\u6dfb\u52a0\u7684\u7d22\u5f15\u8282\u70b9\u53ea\u9700\u8981\u8ffd\u52a0\u5728\u7d22\u5f15\u6587\u4ef6\u7684\u672b\u5c3e\r\n  {\r\n   printf(\"\u5199\u5165\u7d22\u5f15\u6587\u4ef6\u5931\u8d25\u3002\",RED);\r\n   return 0;\r\n  }\r\n }\r\n else\r\n {\r\n  \/\/\u5728\u7d22\u5f15\u4e2d\u53ea\u662f\u4fee\u6539\u4e86\u8282\u70b9\u6570\u636e,\u6ca1\u6709\u6dfb\u52a0\u65b0\u7d22\u5f15.\r\n  switch(AdjustIndex(IndexData))\r\n  {\r\n  case 0:\r\n   {\r\n    printf(\"\u8c03\u6574\u7d22\u5f15\u5931\u8d25\u3002\",RED);\r\n    return 0;\r\n   }\r\n  case -1:\r\n   {\r\n    printf(\"\u6587\u4ef6\u5f02\u5e38,\u8bf7\u91cd\u65b0\u5efa\u7acb!\",RED);\r\n    return 0;\r\n   }\r\n  default:\r\n   break;\r\n  }\r\n }\r\n return 1;\r\n}\r\n\r\nint Alter_Word(LARGE_INTEGER CurrSize,WORD_INFO *WI)\r\n{\r\n DWORD tmp_dw;\r\n TCHAR TC_temp[100];\r\n char ch_temp[100];\r\n\r\n memset(TC_temp,NULL,sizeof(TC_temp));\r\n memset(ch_temp,NULL,sizeof(ch_temp));\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,50,_T(\"\u4fee\u6539\u8bfb\u97f3\"),_T(\"\u4fee\u6539\u8bcd\u6761\"),CharToTCHAR(WI-&gt;pronunciation),300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memset(WI-&gt;pronunciation,NULL,50);\r\n memcpy(WI-&gt;pronunciation,ch_temp,50);\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,20,_T(\"\u4fee\u6539\u8bcd\u6027\"),_T(\"\u4fee\u6539\u8bcd\u6761\"),CharToTCHAR(WI-&gt;property),300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memset(WI-&gt;property,NULL,20);\r\n memcpy(WI-&gt;property,ch_temp,20);\r\n\r\n do\r\n {\r\n  InputBox(TC_temp,100,_T(\"\u4fee\u6539\u91ca\u4e49\"),_T(\"\u4fee\u6539\u8bcd\u6761\"),CharToTCHAR(WI-&gt;describe),300,200);\r\n  memcpy(ch_temp,TCHARToChar(TC_temp),sizeof(ch_temp));               \/\/\u5c06TCHAR\u7c7b\u578b\u5b57\u7b26\u96c6\u8f6c\u6362\u4e3achar\u7c7b\u578b\r\n }while(strlen(ch_temp)&lt;1);\r\n memset(WI-&gt;describe,NULL,100);\r\n memcpy(WI-&gt;describe,ch_temp,100);\r\n\r\n SetFilePointer(hDataFile,CurrSize.LowPart,&amp;CurrSize.HighPart,FILE_BEGIN);\r\n if(!WriteFile(hDataFile,WI,sizeof(WORD_INFO),&amp;tmp_dw,NULL))\r\n  return 0;\r\n return 1;\r\n}\r\n\r\nint Delete_Word(const LARGE_INTEGER CurrSize)\r\n{\r\n \/\/\u8fd4\u56de\u503c:1.\u5220\u9664\u6210\u529f.0.\u5220\u9664\u5931\u8d25.-1.\u7a0b\u5e8f\u5f02\u5e38\r\n int word_ascii;\r\n DWORD tmp_dw;\r\n WORD_INFO WordReadBuff;\r\n INDEXDATA IndexReadBuff;\r\n INDEXDATA *PIndex=NULL;\r\n LARGE_INTEGER refer,WriteAddr,ReadAddr;\r\n LARGE_INTEGER MovSize=CurrSize;\r\n\r\n memset(&amp;WordReadBuff,NULL,sizeof(WORD_INFO));\r\n memset(&amp;IndexReadBuff,NULL,sizeof(INDEXDATA));\r\n memset(&amp;refer,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;WriteAddr,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;ReadAddr,NULL,sizeof(LARGE_INTEGER));\r\n\r\n SetFilePointer(hDataFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);\r\n if(!ReadFile(hDataFile,&amp;WordReadBuff,sizeof(WORD_INFO),&amp;tmp_dw,NULL))\r\n {\r\n  print(\"\u8bfb\u53d6\u6570\u636e\u5e93\u6587\u4ef6\u51fa\u9519.\",RED);\r\n  return 0;\r\n }\r\n word_ascii=ASCII_SUM(WordReadBuff.word);\r\n PIndex=SearchAVL(AVL_ROOT,word_ascii);\r\n if(PIndex==NULL)\r\n {\r\n  print(\"\u672a\u627e\u5230\u6b64\u8bcd\u6761\u7d22\u5f15.\",RED);\r\n  return -1;\r\n }\r\n refer=PIndex-&gt;Start;                 \/\/\u4fdd\u5b58\u5f53\u524d\u8bcd\u6761\u8d77\u59cb\u5730\u5740\r\n if(PIndex-&gt;Count&gt;1)\r\n {\r\n  PIndex-&gt;Count--;                 \/\/\u6b64\u8bcd\u6761\u7c7b\u578b\u7684\u7d22\u5f15\u8fd8\u5b58\u5728,\u53ea\u662f\u8bcd\u6761\u6570\u76ee\u51cf\u4e00\r\n  InsertIndexToFile(*PIndex,0);    \/\/\u4fee\u6539\u6587\u4ef6\u5185\u50a8\u5b58\u7684\u76f8\u5e94\u7d22\u5f15\r\n }\r\n else\r\n {\r\n  \/\/\u6b64\u7c7b\u578b\u7684\u8bcd\u6761\u88ab\u5220\u5b8c,\u7d22\u5f15\u968f\u4e4b\u8981\u88ab\u5220\u9664.\r\n  Delete_Index(word_ascii);\r\n  \/\/\u5220\u9664\u6587\u4ef6\u5185\u76f8\u5e94\u7d22\u5f15\u540e\u8981\u9500\u6bc1\u73b0\u6709\u7d22\u5f15,\u521d\u59cb\u5316\u65b0\u7d22\u5f15.\r\n  DestroyAVL(AVL_ROOT);\r\n  InitIndex();\r\n }\r\n if(!AlterIndexStartAddr(AVL_ROOT,&amp;refer,1) &amp;&amp; GetLastError()!=0)\r\n {\r\n  print(\"\u66f4\u65b0\u7d22\u5f15\u5931\u8d25.\",RED);\r\n  return 0;\r\n }\r\n\r\n \/\/\u5220\u9664\u6570\u636e\u5e93\u6587\u4ef6\u4e2d\u7684\u8bcd\u6761\u4fe1\u606f\r\n memset(&amp;DataFileSize,NULL,sizeof(LARGE_INTEGER));\r\n GetFileSizeEx(hDataFile,&amp;DataFileSize);                  \/\/\u83b7\u53d6\u6570\u636e\u5e93\u6587\u4ef6\u5927\u5c0f\r\n WriteAddr=CurrSize;\r\n ReadAddr.QuadPart=WriteAddr.QuadPart+sizeof(WORD_INFO);\r\n if(ReadAddr.QuadPart==DataFileSize.QuadPart)\r\n {\r\n  SetFilePointer(hDataFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);\r\n  SetEndOfFile(hDataFile);\r\n  return 1;\r\n }\r\n while(1)\r\n {\r\n  SetFilePointer(hDataFile,ReadAddr.LowPart,&amp;ReadAddr.HighPart,FILE_BEGIN);\r\n  if(!ReadFile(hDataFile,&amp;WordReadBuff,sizeof(WORD_INFO),&amp;tmp_dw,NULL))\r\n   return 0;\r\n  if(tmp_dw&lt;1) break;\r\n  SetFilePointer(hDataFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);\r\n  if(!WriteFile(hDataFile,&amp;WordReadBuff,sizeof(WORD_INFO),&amp;tmp_dw,NULL))\r\n   return 0;\r\n  WriteAddr.QuadPart+=sizeof(WORD_INFO);\r\n  ReadAddr.QuadPart+=sizeof(WORD_INFO);\r\n  if(ReadAddr.QuadPart==DataFileSize.QuadPart)\r\n  {\r\n   SetFilePointer(hDataFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);\r\n   SetEndOfFile(hDataFile);\r\n   return 1;\r\n  }\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nint Delete_Index(int ascii)\r\n{\r\n DWORD tmp_dw;\r\n INDEXDATA ReadBuff;\r\n LARGE_INTEGER ReadAddr,CurrSize,WriteAddr;\r\n\r\n memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n memset(&amp;ReadAddr,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;CurrSize,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;WriteAddr,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;DataFileSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n GetFileSizeEx(hIndexFile,&amp;DataFileSize);                                      \/\/\u83b7\u53d6\u7d22\u5f15\u6587\u4ef6\u5927\u5c0f\r\n SetFilePointer(hIndexFile,CurrSize.LowPart,&amp;CurrSize.HighPart,FILE_BEGIN);    \/\/\u6587\u4ef6\u5185\u90e8\u6307\u9488\u81f3\u4e8e\u8d77\u59cb\u4f4d\u7f6e\r\n while(1)\r\n {\r\n  if(!ReadFile(hIndexFile,&amp;ReadBuff,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n  {\r\n   print(\"\u8bfb\u53d6\u7d22\u5f15\u6587\u4ef6\u51fa\u9519.\",RED);\r\n   return 0;\r\n  }\r\n  if(tmp_dw&lt;1) break;\r\n  if(ReadBuff.ASCII==ascii)\r\n  {\r\n   memset(&amp;CurrSize,NULL,sizeof(LARGE_INTEGER));\r\n   CurrSize.LowPart=SetFilePointer(hIndexFile,CurrSize.LowPart,&amp;CurrSize.HighPart,FILE_CURRENT);   \/\/\u83b7\u53d6\u5f53\u524d\u6587\u4ef6\u6307\u9488\r\n   ReadAddr=CurrSize;\r\n   memset(&amp;WriteAddr,NULL,sizeof(LARGE_INTEGER));\r\n   WriteAddr.QuadPart=ReadAddr.QuadPart-sizeof(INDEXDATA);            \/\/\u5411\u540e\u9000\u4e00\u4e2a\u7d22\u5f15\u7684\u957f\u5ea6\r\n   if(ReadAddr.QuadPart==DataFileSize.QuadPart)\r\n   {\r\n    SetFilePointer(hIndexFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);\r\n    SetEndOfFile(hIndexFile);\r\n    return 1;\r\n   }\r\n   while(1)\r\n   {\r\n    memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n    if(!ReadFile(hIndexFile,&amp;ReadBuff,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n     return 0;\r\n    if(tmp_dw&lt;1) break;\r\n    SetFilePointer(hIndexFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);     \/\/\u5b9a\u4f4d\u5230\u5f00\u59cb\u5199\u5165\u7684\u4f4d\u7f6e\r\n    if(!WriteFile(hIndexFile,&amp;ReadBuff,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n     return 0;\r\n    ReadAddr.QuadPart+=sizeof(INDEXDATA);\r\n    WriteAddr.QuadPart+=sizeof(INDEXDATA);\r\n    if(ReadAddr.QuadPart==DataFileSize.QuadPart)\r\n    {\r\n     SetFilePointer(hIndexFile,WriteAddr.LowPart,&amp;WriteAddr.HighPart,FILE_BEGIN);\r\n     SetEndOfFile(hIndexFile);                     \/\/\u8bbe\u7f6e\u6587\u4ef6\u672b\u5730\u5740\r\n     return 1;\r\n    }\r\n    SetFilePointer(hIndexFile,ReadAddr.LowPart,&amp;ReadAddr.HighPart,FILE_BEGIN);         \/\/\u5b9a\u4f4d\u5230\u5f00\u59cb\u8bfb\u53d6\u7684\u4f4d\u7f6e\r\n   }\r\n  }\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nint OptimizeIndexFile()\r\n{\r\n Queue Q;\r\n DWORD tmp_dw;\r\n QUEUE_DATATYPE elem;\r\n LARGE_INTEGER MovSize;\r\n\r\n memset(&amp;Q,NULL,sizeof(Queue));\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n SetFilePointer(hIndexFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);                 \/\/\u5b9a\u4f4d\u5230\u8d77\u59cb\u4f4d\u7f6e\r\n SetEndOfFile(hIndexFile);            \/\/\u6e05\u7a7a\u7d22\u5f15\u6587\u4ef6\u4e2d\u6240\u6709\u5185\u5bb9\r\n\r\n \/\/\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\r\n if(!EnQueue(&amp;Q,AVL_ROOT))           \/\/AVL\u6811\u6839\u5165\u961f\r\n  return 0;\r\n while(Q.queuesize!=0)\r\n {\r\n  DeQueue(&amp;Q,&amp;elem);\r\n  if(elem-&gt;left)\r\n   if(!EnQueue(&amp;Q,elem-&gt;left))\r\n    return 0;\r\n  if(elem-&gt;right)\r\n   if(!EnQueue(&amp;Q,elem-&gt;right))\r\n    return 0;\r\n  if(!WriteFile(hIndexFile,&amp;elem-&gt;data,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n   return 0;\r\n }\r\n\r\n return 1;\r\n}\r\n\r\nvoid ShowFile()\r\n{\r\n FILE *file=NULL;\r\n LARGE_INTEGER MovSize;\r\n INDEXDATA IndexReadBuff;\r\n DWORD tmp_dw;\r\n\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;IndexReadBuff,NULL,sizeof(INDEXDATA));\r\n\r\n if((file=fopen(\"IndexForm.txt\",\"wt+\"))==NULL)\r\n {\r\n  print(\"\u521b\u5efa\u4e34\u65f6\u6587\u4ef6\u5931\u8d25.\",RED);\r\n  return;\r\n }\r\n\r\n fprintf(file,\"\u7d22\u5f15\u6587\u4ef6\u7ed3\u6784:\\n\\n\");\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n SetFilePointer(hIndexFile,MovSize.LowPart,&amp;MovSize.HighPart,FILE_BEGIN);\r\n while(1)\r\n {\r\n  if(!ReadFile(hIndexFile,&amp;IndexReadBuff,sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n   break;\r\n  if(tmp_dw&lt;1) break;\r\n  fprintf(file,\"ASCII\uff1a%d\\t\\t\",IndexReadBuff.ASCII);\r\n  fprintf(file,\"StartAddr:%d\\t\\t\",IndexReadBuff.Start.QuadPart);\r\n  fprintf(file,\"WordCount:%d\\n\",IndexReadBuff.Count);\r\n }\r\n fclose(file);\r\n ShellExecute(NULL,_T(\"open\"),_T(\"IndexForm.txt\"),NULL,NULL,SW_SHOWNORMAL);\r\n return;\r\n}\r\n\r\n\/*------------------------------------init.h----------------------------------------------*\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;windows.h&gt;\r\n#include &lt;conio.h&gt;\r\n#include &lt;io.h&gt;\r\n#include \"FileOper.h\"\r\n#include \"global.h\"\r\n#include \"AVL.h\"\r\n#include \"GUI.h\"\r\n\r\nint InitFile()\r\n{\r\n \/\/\u68c0\u67e5\u6587\u4ef6\u7684\u5b8c\u6574\u6027,\u521b\u5efa\u6216\u6253\u5f00\u6587\u4ef6.\r\n char choose;\r\n\r\n if(access(DataFilePath,0) || access(IndexFilePath,0))\r\n {\r\n  \/\/\u68c0\u6d4b\u6570\u636e\u5e93\u6587\u4ef6\u6216\u7d22\u5f15\u6587\u4ef6\u662f\u5426\u5b58\u5728\r\n  print(\"\u6587\u4ef6\u4e22\u5931,\u662f\u5426\u91cd\u5efa?(Y\/N)\",RED);\r\n  while(1)\r\n  {\r\n   fflush(stdin);\r\n   choose=_getch();\r\n   if(choose=='Y' || choose=='y')\r\n    break;\r\n   else if(choose=='N' || choose=='n')\r\n    exit(0);\r\n  }\r\n  if(!CreateDataFile()) return 0;\r\n  if(!CreateIndexFile()) return 0;\r\n  print(\"\u6587\u4ef6\u521b\u5efa\u6210\u529f.\",GREEN);\r\n  return 1;\r\n }\r\n if(!OpenDataFile()) return 0;\r\n if(!OpenIndexFile()) return 0;\r\n return 1;\r\n}\r\n\r\nint InitIndex()\r\n{\r\n DWORD tmp_dw;\r\n INDEXDATA ReadBuff;\r\n LARGE_INTEGER MovSize,CurrSize;\r\n\r\n AVL_ROOT=NULL;                     \/\/AVL\u7d22\u5f15\u6839\u8282\u70b9\u6307\u9488\u7f6e\u7a7a\r\n memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n memset(&amp;MovSize,NULL,sizeof(LARGE_INTEGER));\r\n memset(&amp;CurrSize,NULL,sizeof(LARGE_INTEGER));\r\n\r\n SetFilePointerEx(hIndexFile,MovSize,&amp;CurrSize,FILE_BEGIN);        \/\/\u5c06\u6587\u4ef6\u6307\u9488\u81f3\u4e8e\u6587\u4ef6\u8d77\u59cb\u4f4d\u7f6e\r\n while(1)\r\n {\r\n  if(!ReadFile(hIndexFile,(LPVOID)&amp;ReadBuff,(DWORD)sizeof(INDEXDATA),&amp;tmp_dw,NULL))\r\n   return 0;\r\n  if(tmp_dw&lt;1) break;\r\n  InsertIndexFromFile(&amp;AVL_ROOT,&amp;ReadBuff);          \/\/\u5c06\u4ece\u6587\u4ef6\u5185\u8bfb\u51fa\u7684\u7d22\u5f15\u63d2\u5165\u5230\u5185\u5b58\u4e2d\r\n  memset(&amp;ReadBuff,NULL,sizeof(INDEXDATA));\r\n }\r\n\r\n return 1;\r\n}<\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\n\t\/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;Main.cpp&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*\/<br \/>\n#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\n#include &lt;string.h&gt;<br \/>\n#include &lt;windows.h&gt;<br \/>\n#&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[326],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178 - Wayne&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/weizn.net\/?p=68\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178 - Wayne&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"\/*------------------------------------Main.cpp----------------------------------------------*\/ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #...\" \/>\n<meta property=\"og:url\" content=\"http:\/\/weizn.net\/?p=68\" \/>\n<meta property=\"og:site_name\" content=\"Wayne&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-12-20T02:00:47+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"zinan\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/weizn.net\/#website\",\"url\":\"http:\/\/weizn.net\/\",\"name\":\"Wayne&#039;s Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/weizn.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/weizn.net\/?p=68#webpage\",\"url\":\"http:\/\/weizn.net\/?p=68\",\"name\":\"\\u6570\\u636e\\u7ed3\\u6784\\u7ed3\\u8bfe\\u8bbe\\u8ba1\\u2014\\u2014\\u7b80\\u660e\\u6c49\\u8bed\\u8bcd\\u5178 - Wayne&#039;s Blog\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/#website\"},\"datePublished\":\"2013-12-20T02:00:47+00:00\",\"dateModified\":\"2013-12-20T02:00:47+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/weizn.net\/?p=68#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/weizn.net\/?p=68\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/weizn.net\/?p=68#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\\u9996\\u9875\",\"item\":\"http:\/\/weizn.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\\u6570\\u636e\\u7ed3\\u6784\\u7ed3\\u8bfe\\u8bbe\\u8ba1\\u2014\\u2014\\u7b80\\u660e\\u6c49\\u8bed\\u8bcd\\u5178\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/weizn.net\/?p=68#article\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/?p=68#webpage\"},\"author\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"headline\":\"\\u6570\\u636e\\u7ed3\\u6784\\u7ed3\\u8bfe\\u8bbe\\u8ba1\\u2014\\u2014\\u7b80\\u660e\\u6c49\\u8bed\\u8bcd\\u5178\",\"datePublished\":\"2013-12-20T02:00:47+00:00\",\"dateModified\":\"2013-12-20T02:00:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/weizn.net\/?p=68#webpage\"},\"wordCount\":0,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"articleSection\":[\"\\u6570\\u636e\\u7ed3\\u6784\\u53ca\\u7b97\\u6cd5\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/weizn.net\/?p=68#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\",\"name\":\"zinan\",\"logo\":{\"@id\":\"http:\/\/weizn.net\/#personlogo\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178 - Wayne&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/weizn.net\/?p=68","og_locale":"zh_CN","og_type":"article","og_title":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178 - Wayne&#039;s Blog","og_description":"\/*------------------------------------Main.cpp----------------------------------------------*\/ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #...","og_url":"http:\/\/weizn.net\/?p=68","og_site_name":"Wayne&#039;s Blog","article_published_time":"2013-12-20T02:00:47+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"zinan","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"22 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/weizn.net\/#website","url":"http:\/\/weizn.net\/","name":"Wayne&#039;s Blog","description":"","publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/weizn.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"WebPage","@id":"http:\/\/weizn.net\/?p=68#webpage","url":"http:\/\/weizn.net\/?p=68","name":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178 - Wayne&#039;s Blog","isPartOf":{"@id":"http:\/\/weizn.net\/#website"},"datePublished":"2013-12-20T02:00:47+00:00","dateModified":"2013-12-20T02:00:47+00:00","breadcrumb":{"@id":"http:\/\/weizn.net\/?p=68#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["http:\/\/weizn.net\/?p=68"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/weizn.net\/?p=68#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"http:\/\/weizn.net\/"},{"@type":"ListItem","position":2,"name":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178"}]},{"@type":"Article","@id":"http:\/\/weizn.net\/?p=68#article","isPartOf":{"@id":"http:\/\/weizn.net\/?p=68#webpage"},"author":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"headline":"\u6570\u636e\u7ed3\u6784\u7ed3\u8bfe\u8bbe\u8ba1\u2014\u2014\u7b80\u660e\u6c49\u8bed\u8bcd\u5178","datePublished":"2013-12-20T02:00:47+00:00","dateModified":"2013-12-20T02:00:47+00:00","mainEntityOfPage":{"@id":"http:\/\/weizn.net\/?p=68#webpage"},"wordCount":0,"commentCount":0,"publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"articleSection":["\u6570\u636e\u7ed3\u6784\u53ca\u7b97\u6cd5"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/weizn.net\/?p=68#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264","name":"zinan","logo":{"@id":"http:\/\/weizn.net\/#personlogo"}}]}},"_links":{"self":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":0,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"wp:attachment":[{"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}