diff --git a/DataStructure/README.md b/DataStructure/README.md index dd807fd..74e9a6f 100644 --- a/DataStructure/README.md +++ b/DataStructure/README.md @@ -13,5 +13,6 @@ . ├── test1 # 实验1 ├── test2 # 实验2 -└── test3 # 实验3 +├── test3 # 实验3 +└── test4 # 实验3 ``` diff --git a/DataStructure/test4/实验四.cpp b/DataStructure/test4/实验四.cpp new file mode 100644 index 0000000..d679348 --- /dev/null +++ b/DataStructure/test4/实验四.cpp @@ -0,0 +1,162 @@ +#include +#include +#include + +#define MAXSIZE 100 +typedef struct Stack +{ + char *base; // Õ»µ×Ö¸Õë + char *top; // Õ»¶¥Ö¸Õë + int stacksize; // Õ»¿ÉÓõÄ×î´óÈÝÁ¿ + int length; // ÐÂÔö£ºÓÃÀ´ÅжÏÕ»ÊÇ·ñΪ¿Õ +} Stack; + +// ³õʼ»¯ +void InitStack(Stack &p) +{ + p.base = new char[MAXSIZE]; // ·ÖÅä¿Õ¼ä + // todo list ´¦Àí Õ»¶¥Ö¸Õëtop³õʼΪbase + p.top = p.base; + // todo list ´¦Àístacksize¡¢length + p.length = 0; + p.stacksize = MAXSIZE - p.length; +} + +#define OK 0 +#define ERROR 0 +typedef int Status; +// ÈëÕ» +Status Push(Stack &p, char e) +{ + // if(//todo list) // Õ»Âú + if (p.length >= MAXSIZE) // Õ»Âú + return ERROR; + // todo list //½«ÔªËØeѹÈëÕ»¶¥ + *(p.top) = e; + // todo list //Õ»¶¥Ö¸Õë¼Ó1 + p.top++; + + p.length++; + return OK; +} + +// ³öÕ» +char Pop(Stack &p) +{ + char e; + // if(//todo list) // Õ»¿Õ + if (p.length == 0) // Õ»¿Õ + return ERROR; + // todo list //Õ»¶¥Ö¸Õë¼õ1 + p.top--; + // todo list //ȡջ¶¥ÔªËØ + e = *p.top; + + p.length--; + return e; +} + +// 1¡¢ÅжÏÊÇ·ñΪ»ØÎÄ´® +void Palindrome(Stack &S, char a[]) +{ + int i; + // Õ»Çå¿Õ + S.top = S.base; + S.length = 0; + for (i = 0; a[i] != '\0'; i++) + { + // todo list //forÑ­»· °Ñ×Ö·û´®È«²¿ÈëÕ»Push() + Push(S, a[i]); + } + for (i = 0; a[i] != '\0'; i++) + { + // todo list //forÑ­»· ¶Ô±È´®µÄÁ½¶ËÔªËØ£¬Èç¹ûPop(S) != a[i]Ôò±íÃ÷²»ÊÇ»ØÎÄ,Í˳ö + if (Pop(S) != a[i]) + break; + } + if (i == strlen(a)) + { + printf("------»ØÎÄ------\n"); + } + else + { + printf("----²»ÊÇ»ØÎÄ----\n"); + } +} + +// 2¡¢À¨ºÅÆ¥Åä¼ìÑ顪¡ª¿É²Î¿¼¿Î±¾P75 +// Ö»ÌÖÂÛÓÉÔ²À¨ºÅ()ºÍÖÐÀ¨ºÅ[]×é³ÉµÄÀ¨ºÅ +void Matching(Stack &S, char ch[]) +{ + int flag = 1; // flag³õʼΪ1£¬µ± flag = 1ʱ±íʾƥÅä³É¹¦ + int i = 0; + // Õ»Çå¿Õ + S.top = S.base; + S.length = 0; + + // todo list //while×öÀ¨ºÅÆ¥Åä¼ìÑ飺 + while (ch[i] != '\0' && flag) + { + // ÈôΪ×óÀ¨ºÅ£¬Ôò½«ÆäÈëÕ»£» + if (ch[i] == '(' || ch[i] == '[') + { + Push(S, ch[i]); + } + // ÈôΪÓÒÀ¨ºÅ£¬ÔòÓë³öÕ»µÄÕ»¶¥ÔªËؽøÐбȽϣ¬·ÖÎöÊÇ·ñÄܹ»Åä¶Ô£¨Èç¹û²»Æ¥Å䣬עÒ⽫flagÖÃΪ0 £©¡£ + else if (ch[i] == ')' || ch[i] == ']') + { + if (S.length == 0) + { + flag = 0; + } + else + { + char top = Pop(S); + if ((ch[i] == ')' && top != '(') || (ch[i] == ']' && top != '[')) + { + flag = 0; + } + } + } + i++; + } + + if (S.length == 0 && flag) // Õ»¿ÕÇÒflag = 1ʱ£¬À¨ºÅÆ¥Åä + printf("-----À¨ºÅÆ¥Åä-----\n"); + else + printf("----À¨ºÅ²»Æ¥Åä----\n"); +} + +int main() +{ + char a[20], b[20]; + Stack s; + InitStack(s); + int choose = -1; + printf("------------------------------------\n"); + printf("1.ÅжÏÊÇ·ñÊÇ»ØÎÄ×Ö·û´®\n"); + printf("2.ÅжÏÀ¨ºÅÊÇ·ñÆ¥Åä\n"); + printf("0.Í˳ö\n"); + printf("------------------------------------\n"); + while (choose) + { + printf("ÇëÊäÈëÑ¡Ïî:"); + scanf("%d", &choose); + switch (choose) + { + case 1: + printf("ÇëÊäÈëÒ»¸ö×Ö·û´®£º"); + scanf("%s", a); + Palindrome(s, a); + break; + case 2: + printf("ÇëÊäÈëÒ»¸ö×Ö·û´®(ÓÉÔ²À¨ºÅºÍÖÐÀ¨ºÅ×é³É)£º"); + scanf("%s", b); + Matching(s, b); + break; + case 0: + exit(0); + break; + } + } +} \ No newline at end of file