diff --git a/DataStructure/README.md b/DataStructure/README.md index e95e2a4..be6d685 100644 --- a/DataStructure/README.md +++ b/DataStructure/README.md @@ -15,5 +15,24 @@ ├── test2 # 实验2 ├── test3 # 实验3 ├── test4 # 实验4 -└── test5 # 实验5 +├── test5 # 实验5 +└── test6 # 实验6 ``` +### 实验结果 +- 实验 1 + ![实验 1](./images/test1.png) + +- 实验 2 + ![实验 2](./images/test2.png) + +- 实验 3 + ![实验 3](./images/test3.png) + +- 实验 4 + ![实验 4](./images/test4.png) + +- 实验 5 + ![实验 5](./images/test5.png) + +- 实验 6 + ![实验 6](./images/test6.png) diff --git a/DataStructure/images/test1.png b/DataStructure/images/test1.png new file mode 100644 index 0000000..c271f6c Binary files /dev/null and b/DataStructure/images/test1.png differ diff --git a/DataStructure/images/test2.png b/DataStructure/images/test2.png new file mode 100644 index 0000000..f16bb2f Binary files /dev/null and b/DataStructure/images/test2.png differ diff --git a/DataStructure/images/test3.png b/DataStructure/images/test3.png new file mode 100644 index 0000000..b63a762 Binary files /dev/null and b/DataStructure/images/test3.png differ diff --git a/DataStructure/images/test4.png b/DataStructure/images/test4.png new file mode 100644 index 0000000..3dfe599 Binary files /dev/null and b/DataStructure/images/test4.png differ diff --git a/DataStructure/images/test5.png b/DataStructure/images/test5.png new file mode 100644 index 0000000..e4d73f4 Binary files /dev/null and b/DataStructure/images/test5.png differ diff --git a/DataStructure/images/test6.png b/DataStructure/images/test6.png new file mode 100644 index 0000000..bcd369b Binary files /dev/null and b/DataStructure/images/test6.png differ diff --git a/DataStructure/test6/实验六.cpp b/DataStructure/test6/实验六.cpp new file mode 100644 index 0000000..b2712ff --- /dev/null +++ b/DataStructure/test6/实验六.cpp @@ -0,0 +1,304 @@ +#include +#include +#define OK 1 +typedef int Status; +typedef struct BiTNode +{ + char data; // ½áµãÊý¾ÝÓò + struct BiTNode *lchild, *rchild; // ×óÓÒº¢×ÓÖ¸Õë +} BiTNode, *BiTree; + +// 1¡¢´´½¨¶þ²æÁ´±í£º°´ÏÈÐò´ÎÐòÊäÈë¶þ²æÊ÷ÖнáµãµÄÖµ£¬´´½¨¶þ²æÁ´±í±íʾµÄ¶þ²æÊ÷T +// Àý£º½¨Á¢¿Î±¾P115ͼ5.10(b)µÄ¶þ²æÊ÷¡ª¡ª¶ÁÈë×Ö·ûµÄ˳ÐòΪ£ºABC##DE#G##F###(#±íʾ¿ÕÊ÷) +BiTree Create(BiTree &T) +{ + char ch; + printf("ÇëÊäÈëÒ»¸ö×Ö·û:"); + scanf("%c", &ch); + getchar(); // Çå¿Õ»º³åÇø£¬°ÑÒÅÁôµÄ\nÇå³ý + + // todo list //if: Èç¹ûÊäÈëµÄÊÇ¡¯#¡¯£¬Ôò½¨Á¢Ò»¿Ã¿ÕÊ÷ + if (ch == '#') + { + T = NULL; + } + // else£º·ñÔò£¬µÝ¹é½¨Á¢Ò»¸ö¶þ²æÊ÷£¨×¢Ò⣺Êǰ´°´ÏÈÐò´ÎÐò´´½¨µÄ¶þ²æÊ÷£© + else + { + T = (BiTree)malloc(sizeof(BiTNode)); + T->data = ch; + Create(T->lchild); + Create(T->rchild); + } + return T; +} + +// ÏÈÐò±éÀú¶þ²æÊ÷ +Status PreOrder(BiTree &T) +{ + // todo list //if: Èç¹ûÊÇ¿ÕÊ÷£¬Ôò·µ»Ø + if (T == NULL) + { + return OK; + } + // else:·ñÔò£¬ÏÈ·ÃÎʸù½áµã (D) + else + { + printf("%c ", T->data); + // ǰÐò±éÀú×ó×ÓÊ÷ (L) + PreOrder(T->lchild); + // ǰÐò±éÀúÓÒ×ÓÊ÷ (R) + PreOrder(T->rchild); + } + return OK; +} + +// ÖÐÐò±éÀú¶þ²æÊ÷ +Status InOrder(BiTree &T) +{ + // todo list //if: Èç¹ûÊÇ¿ÕÊ÷£¬Ôò·µ»Ø + if (T == NULL) + { + return OK; + } + // else:·ñÔò£¬ÏÈÖÐÐò±éÀú×ó×ÓÊ÷ (L) + else + { + InOrder(T->lchild); + // ·ÃÎʸù½áµã (D) + printf("%c ", T->data); + // ÖÐÐò±éÀúÓÒ×ÓÊ÷ (R) + InOrder(T->rchild); + } + return OK; +} + +// ºóÐò±éÀú +Status PostOrder(BiTree &T) +{ + // todo list //if: Èç¹ûÊÇ¿ÕÊ÷£¬Ôò·µ»Ø + if (T == NULL) + { + return OK; + } + // else:·ñÔò£¬ÏȺóÐò±éÀú×ó×ÓÊ÷ (L) + else + { + PostOrder(T->lchild); + // ºóÐò±éÀúÓÒ×ÓÊ÷ (R) + PostOrder(T->rchild); + // ·ÃÎʸù½áµã (D) + printf("%c ", T->data); + } + return OK; +} + +// ²ã´Î±éÀú1 +void LeverOrder(BiTree &T) +{ + if (T == NULL) + { // ´¦Àí¿ÕÊ÷£¬±ÜÃâ¿ÕÖ¸Õë·ÃÎÊ + printf("¶þ²æÊ÷Ϊ¿Õ£¡\n"); + return; + } + // BT *Queue[100]; //¶ÓÁÐ + BiTree Queue[100]; // ¶ÓÁÐ + char ch; + int front = 0; + int rear = 0; + // ¶ÓÁб߽ç¼ì²é£¨ÐÂÔö£º·ÀÖ¹Êý×éÔ½½ç£© + if (rear >= 100) + { + printf("¶ÓÁÐÒÑÂú£¬ÎÞ·¨Èë¶Ó£¡\n"); + return; + } + Queue[rear++] = T; // ¸ù½ÚµãÈë¶Ó + while (front < rear) // µ±¶Ó²»¿Õ + { + ch = Queue[front]->data; // ³ö¶Ó¶ÓÍ·ÔªËØ + printf("%c ", ch); + if (Queue[front]->lchild) + { + if (rear >= 100) + { + printf("¶ÓÁÐÒÑÂú£¬×óº¢×ÓÎÞ·¨Èë¶Ó£¡\n"); + break; + } + Queue[rear++] = Queue[front]->lchild; + } + if (Queue[front]->rchild) + { + if (rear >= 100) + { + printf("¶ÓÁÐÒÑÂú£¬ÓÒº¢×ÓÎÞ·¨Èë¶Ó£¡\n"); + break; + } + Queue[rear++] = Queue[front]->rchild; + } + front++; // ¶ÓÍ·ºóÒÆ£¬Íê³É³ö¶Ó + } +} + +/* + +// ------------- Ñ­»·¶ÓÁнṹÌ嶨Ò壨²ãÐò±éÀúÒÀÀµ¶ÓÁУ© ------------- +#define MAXQSIZE 100 // ¶ÓÁÐ×î´óÈÝÁ¿ +typedef struct { + BiTree base[MAXQSIZE]; // ¶ÓÁд洢¶þ²æÊ÷½áµãÖ¸Õë + int front; // ¶ÓÍ·Ö¸Õë + int rear; // ¶ÓβָÕë +} SqQueue; + +// ³õʼ»¯¶ÓÁÐ +int InitQueue(SqQueue *qu) { + qu->front = qu->rear = 0; // ¿Õ¶ÓÁУº¶ÓÍ·=¶Óβ=0 + return 1; +} + +// Åж϶ÓÁÐÊÇ·ñΪ¿Õ +int QueueEmpty(SqQueue *qu) { + return qu->front == qu->rear; +} + +// Èë¶Ó²Ù×÷£¨½«¶þ²æÊ÷½áµãÖ¸ÕëÈë¶Ó£© +int enQueue(SqQueue *qu, BiTree p) { + // Åж϶ÓÁÐÊÇ·ñÂú£¨Ñ­»·¶ÓÁÐÅÐÂúÌõ¼þ£© + if ((qu->rear + 1) % MAXQSIZE == qu->front) { + printf("¶ÓÁÐÂú£¬Èë¶Óʧ°Ü£¡\n"); + return 0; + } + qu->base[qu->rear] = p; // ½áµãÖ¸ÕëÈë¶Ó + qu->rear = (qu->rear + 1) % MAXQSIZE; // ¶ÓβָÕëºóÒÆ + return 1; +} + +// ³ö¶Ó²Ù×÷£¨È¡³ö¶ÓÍ·½áµãÖ¸Õ룩 +int deQueue(SqQueue *qu, BiTree *p) { + if (QueueEmpty(qu)) { // ¶Ó¿ÕÔò³ö¶Óʧ°Ü + printf("¶ÓÁпգ¬³ö¶Óʧ°Ü£¡\n"); + return 0; + } + *p = qu->base[qu->front]; // È¡³ö¶ÓÍ·ÔªËØ + qu->front = (qu->front + 1) % MAXQSIZE; // ¶ÓÍ·Ö¸ÕëºóÒÆ + return 1; +} + +// ------------- ²ã´Î±éÀú2 ------------- +void LevelOrder(BiTree b) { + BiTree p; + SqQueue qu; // ¶¨Òå¶ÓÁУ¨×¢Ò⣺ԭ²Î¿¼ÖÐquÊÇÖ¸Õ룬´Ë´¦¸ÄΪֱ½Ó¶¨Òå½á¹¹Ì壬¸üÒ×Àí½â£© + + if (b == NULL) return; // ¿ÕÊ÷Ö±½Ó·µ»Ø + + InitQueue(&qu); // ³õʼ»¯¶ÓÁÐ + enQueue(&qu, b); // ¸ù½áµãÈë¶Ó + + while (!QueueEmpty(&qu)) { // ¶ÓÁзǿÕÔòÑ­»· + deQueue(&qu, &p); // ³ö¶Óµ±Ç°½áµã + printf("%c ", p->data); // ·ÃÎʵ±Ç°½áµã + + // ×óº¢×Ó·Ç¿ÕÔòÈë¶Ó + if (p->lchild != NULL) { + enQueue(&qu, p->lchild); + } + // ÓÒº¢×Ó·Ç¿ÕÔòÈë¶Ó + if (p->rchild != NULL) { + enQueue(&qu, p->rchild); + } + } +} +*/ + +// ½Úµã×ÜÊý +int Count(BiTree &T) +{ + // todo list //if£ºÈç¹ûÊÇ¿ÕÊ÷£¬Ôò½áµã¸öÊýΪ0£» + if (T == NULL) + { + return 0; + } + // else£º·ñÔò£¬½áµã¸öÊýΪ×ó×ÓÊ÷µÄ½áµã¸öÊý+ÓÒ×ÓÊ÷µÄ½áµã¸öÊýÔÙ+1¡£ + else + { + return Count(T->lchild) + Count(T->rchild) + 1; + } +} +// Ò¶×Ó½Úµã +int CountLeaf(BiTree &T) +{ + // todo list //if£ºÈç¹ûÊÇ¿ÕÊ÷£¬ÔòÒ¶×Ó½áµã¸öÊýΪ0£» + if (T == NULL) + { + return 0; + } + // else if£ºÈç¹ûÊÇÒ¶×Ó½áµã£¬Ôò·µ»Ø1£» + else if (T->lchild == NULL && T->rchild == NULL) + { + return 1; + } + // else·ñÔò£¬Îª×ó×ÓÊ÷µÄÒ¶×Ó½áµã¸öÊý+ÓÒ×ÓÊ÷µÄÒ¶×Ó½áµã¸öÊý¡£ + else + { + return CountLeaf(T->lchild) + CountLeaf(T->rchild); + } +} +int main() +{ + BiTree T = NULL; // ´´½¨Ò»¿Å¿ÕÊ÷ + int choose = -1; + printf("*********************************************\n"); + printf("********** ʵÑéÁù *******\n"); + printf("*********************************************\n"); + printf("********** 1.´´½¨Ò»¿Ã¶þ²æÊ÷ *******\n"); + printf("********** 2.ÏÈÐò±éÀú¶þ²æÊ÷ *******\n"); + printf("********** 3.ÖÐÐò±éÀú¶þ²æÊ÷ *******\n"); + printf("********** 4.ºóÐò±éÀú¶þ²æÊ÷ *******\n"); + printf("********** 5.²ãÐò±éÀú¶þ²æÊ÷ *******\n"); + printf("********** 6.Çó¶þ²æÊ÷½Úµã¸öÊý *******\n"); + printf("********** 7.Çó¶þ²æÊýÒ¶×Ó½Úµã¸öÊý *******\n"); + printf("********** 0.Í˳ö *******\n"); + printf("*********************************************\n"); + while (choose) + { + printf("\n"); + printf("ÇëÊäÈëÄãµÄÑ¡ÔñÏ"); + scanf("%d", &choose); + getchar(); // Çå¿Õ»º³åÇø£¬°ÑÒÅÁôµÄ\nÇå³ý + switch (choose) + { + case 1: + T = Create(T); + break; // ´´½¨ + printf("\n"); + case 2: + printf("ÏÈÐòÐòÁÐΪ£º"); + PreOrder(T); + break; // ÏÈÐò±éÀú¶þ²æÊ÷ + printf("\n"); + case 3: + printf("ÖÐÐòÐòÁÐΪ£º"); + InOrder(T); + break; // ÖÐÐò±éÀú¶þ²æÊ÷ + printf("\n"); + case 4: + printf("ºóÐòÐòÁÐΪ£º"); + PostOrder(T); + break; // ºóÐò±éÀú¶þ²æÊ÷ + printf("\n"); + case 5: + printf("²ã´ÎÐòÁÐΪ£º"); + LeverOrder(T); + break; // ²ãÐò±éÀú¶þ²æÊ÷ + printf("\n"); + case 6: + printf("½Úµã×ÜÊýΪ£º%d\n", Count(T)); + break; // ½áµã×ÜÊý + case 7: + printf("Ò¶×Ó½Úµã×ÜÊýΪ£º%d\n", CountLeaf(T)); + break; // Ò¶×Ó½áµã×ÜÊý + case 0: + exit(0); + break; + } + } +} \ No newline at end of file