From 16638a339c69c9839ffc7cc0c46bd9dc15ae6062 Mon Sep 17 00:00:00 2001 From: Han Jiang Date: Wed, 29 Mar 2017 13:51:15 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=A4=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tqh/2-1\347\256\227\346\263\225/Header.c" | 74 +++++++++++ .../tqh/2-1\347\256\227\346\263\225/Header.h" | 20 +++ .../tqh/2-1\347\256\227\346\263\225/test.c" | 31 +++++ 2017-1/tqh/3-1-1.c | 105 ++++++++++++++++ 2017-1/tqh/3-1-2.c | 118 ++++++++++++++++++ 2017-1/tqh/3-1-3.c | 108 ++++++++++++++++ 6 files changed, 456 insertions(+) create mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" create mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" create mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/test.c" create mode 100644 2017-1/tqh/3-1-1.c create mode 100644 2017-1/tqh/3-1-2.c create mode 100644 2017-1/tqh/3-1-3.c diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" new file mode 100644 index 00000000..e89398b2 --- /dev/null +++ "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" @@ -0,0 +1,74 @@ +#include +#include"Header.h" + +void CreateList(LinkList *L,int n) +{ + LinkList p = NULL; + int i ; + *L = (LinkList)malloc(sizeof(LNode)); + (*L)->next = NULL; + for(i=0;idata); + p->next = (*L)->next; + (*L)->next = p; + } +} + //createlist + +void sortList(LinkList L,int n) +{ + int i=0; + int j=0; + LinkList head; + LinkList p1; + LinkList p2; + + for(i=0;inext; + for( j=0;jnext; + if( p1->data > p2->data){ + Elemtype temp = p1->data; + p1->data = p2 -> data; + p2->data = temp; + } + head = head->next; + } + } +} +void Traverse(LinkList L) +{ + LNode *p = L->next; + while(p){ + printf("%d ",p->data); + p = p->next; + } +} + +void MergeList_L(LinkList La,LinkList Lb,LinkList *Lc) +{ + LinkList pa,pb,pc; + pa = La->next; + pb = Lb->next; + *Lc = pc = La; + while(pa&&pb){ + if(pa->data <= pb->data){ + pc->next = pa; + pc = pa; + pa = pa->next; + } + else{ + pc->next = pb; + pc = pb; + pb =pb ->next; + } + } + pc->next = pa? pa:pb; + free(Lb); +} + + diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" new file mode 100644 index 00000000..d25fbace --- /dev/null +++ "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" @@ -0,0 +1,20 @@ +#include +#include + +#define OK 0 +#define ERROR 1 +#define OVERFLOW 2 + +typedef int Elemtype; + +typedef struct LNode{ + int data; + struct LNode *next; +}LNode,*LinkList; +//创建结构体及结构体指针 + +void CreateList(LinkList* ,int ); +void sortList(LinkList,int); +void Traverse(LinkList ); +void MergeList_L(LinkList ,LinkList ,LinkList *); + diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" "b/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" new file mode 100644 index 00000000..78c01290 --- /dev/null +++ "b/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" @@ -0,0 +1,31 @@ +#include +#include"Header.h" +#include + +int main() +{ + int i,j; + LinkList L1,L2,Lc; + + L1 =(LinkList) malloc(sizeof(LNode)); + L2 =(LinkList) malloc(sizeof(LNode)); + + printf("L1中值得个数:"); + scanf("%d",&i); + CreateList(&L1,i); + sortList(L1,i); + Traverse(L1); + printf("\n"); + + printf("L2中值得个数:"); + scanf("%d",&j); + CreateList(&L2,j); + sortList(L2,j); + Traverse(L2); + printf("\n"); + + MergeList_L(L1,L2,&Lc); + Traverse(Lc); + return OK; +} + diff --git a/2017-1/tqh/3-1-1.c b/2017-1/tqh/3-1-1.c new file mode 100644 index 00000000..8cba0d4f --- /dev/null +++ b/2017-1/tqh/3-1-1.c @@ -0,0 +1,105 @@ +#include +#include +//#include + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 + +typedef int SElemType; +typedef struct _SqStack { + SElemType *base; + SElemType *top; + int stacksize; +}SqStack; +typedef enum { + false , + true +}bool; + +typedef enum { + OK, + ERROR, + OVERFLOW +} Status; + +Status InitStack (SqStack *S); +Status conversion (SqStack *, int , int); +Status Push(SqStack *S, SElemType e); +Status Pop (SqStack *S,SElemType *e); +bool IsStackEmpty(SqStack *S); + +Status InitStack (SqStack *S) +{ + S->base = (SElemType *)malloc(STACK_INIT_SIZE * + sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + + S->top = S->base; + S->stacksize = STACK_INIT_SIZE; + + return OK; +} + +Status Push(SqStack *S,SElemType e) { + if((S->top-S->base)>=S->stacksize) { + return ERROR; + } + *S->top++ = e; + return OK; + }//入栈 + +Status Pop (SqStack *S,SElemType *e) +{ + if(IsStackEmpty(S)) + { + return ERROR; + } + + *e = *--S->top; + return OK; +} + +bool IsStackEmpty(SqStack *S) +{ + if(S){ + return S->base ==S->top; + } + return true; +} +Status conversion (SqStack *S, int input, int d) +{ + SElemType e; + if(d > 10) { + return ERROR; + } + + while (input) + { + Push(S,input % d); + input = input / d; + } + while (!IsStackEmpty(S)) + { + Pop(S,&e); + printf(" %d", e); + }//conversion + printf("\n"); + return OK; +} +int main(int argc,char* argv[]) +{ + SqStack S; + int input=1348; + int d = 8; + + /*srand(time(NULL)); + input = rand()%1024;*/ + + InitStack(&S);//制造空栈 + conversion (&S, input, d); + + return 0; +} + diff --git a/2017-1/tqh/3-1-2.c b/2017-1/tqh/3-1-2.c new file mode 100644 index 00000000..23c7e7a4 --- /dev/null +++ b/2017-1/tqh/3-1-2.c @@ -0,0 +1,118 @@ +#include + +#define M 1000 + +typedef int Elemtype; +typedef enum{ + ERROR, + OK +}Status; + + typedef struct Stack { + char string[M]; + Elemtype top; + }Stack; + //定义stack结构体类型 + void InitStack(Stack *s) + { + s->top = -1; + } + //结构体初始化 + Status PushStack(Stack *s, char ch) + { + if(s->top == M-1) { + return ERROR; + } + s->top++; + s->string[s->top] = ch; + return OK; + } + //入栈 + Status PopStack(Stack *s, char *ch) + { + if(s->top == -1) { + return ERROR; + } + *ch = s->string[s->top]; + s->top--; + return OK; + } + //出栈 + + Status GetTop(Stack *s, char *ch) + { + if(s->top == -1) { + return ERROR; + } + *ch = s->string[s->top]; + return OK; + } + //得到指定元素的值 + Status IsEmpty(Stack *s) + { + if(s->top == -1) + { + return OK; + } + else { + return ERROR; + } + } + //判断是否栈为空 +Elemtype MatchBracket(char ch1, char ch2) +{ + if(ch1 == '(' && ch2 == ')') { + return 1; + } + if(ch1 == '[' && ch2 == ']') { + return 1; + } + if(ch1 == '{' && ch2 == '}') { + return 1; + } + return 0; +} +//判断括号是否匹配 +int main() +{ + Stack s; + char str[M] = {0}, ch; + int i; + + InitStack(&s); + fprintf(stdout, "Input brackets:"); + fscanf(stdin, "%s", str); + for(i = 0; str[i] != 0; i++) { + switch(str[i]) { + case '(': + case '[': + case '{': + PushStack(&s, str[i]); + break; + case ')': + case ']': + case '}': + if(IsEmpty(&s)) { + printf("right bracket spilth.\n"); + return 0; + } else { + GetTop(&s, &ch); + if(MatchBracket(ch , str[i])) { + PopStack(&s, &ch); + } else{ + printf("left and right brackets are different.\n"); + return 0; + } + } + break; + default: + printf("Input error\n"); + } + } + if(IsEmpty(&s)) { + printf("Left and right brackets are matched.\n"); + } else { + printf("Left bracket spilth..\n"); + } + return 0; +} \ No newline at end of file diff --git a/2017-1/tqh/3-1-3.c b/2017-1/tqh/3-1-3.c new file mode 100644 index 00000000..a71c9ee8 --- /dev/null +++ b/2017-1/tqh/3-1-3.c @@ -0,0 +1,108 @@ +#include +#include + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 + +typedef char SElemType; +typedef enum{ + ERROR, + OK, + OVERFLOW +}Status; + typedef struct { + SElemType *base; + SElemType *top; + int stacksize; + }SqStack; + //定义stack结构体类型 + + Status InitStack(SqStack *S); + Status Push(SqStack *S,SElemType e); + Status Pop(SqStack *S,SElemType *e); + Status ClearStack(SqStack *S); + Status DestroyStack(SqStack *S) ; + void LineEdit(SqStack *S); + +Status InitStack(SqStack *S) { + S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + + S->top = S->base; + S->stacksize = STACK_INIT_SIZE; + + return OK; + }//初始化栈 +Status Push(SqStack *S,SElemType e) { + if((S->top-S->base)>=S->stacksize) { + S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + S->top = S->base + S->stacksize; + S->stacksize += STACKINCREMENT; + } + *S->top++ = e; + return OK; + }//入栈 +Status Pop(SqStack *S,SElemType *e) { + if(S->top == S->base) + return ERROR; + *e = *--S->top; + return OK; + }//出栈 +Status ClearStack(SqStack *S) { + S->top = S->base; + return OK; + } +//清空栈 + Status DestroyStack(SqStack *S) { + S->top = S->base; + free(S->base); + S->top = NULL; + S->base = NULL; + return OK; + }//销毁栈 +void LineEdit(SqStack *S) +{ + //利用字符栈s,从终端接收一行并传送至调用过程的数据区 + char ch,c,*b; + InitStack(S); + ch = getchar(); + while( ch != EOF) + { + while(ch != EOF&&ch!='\n') + { + switch(ch) + { + case '#':Pop(S,&c); + break; + case '@':ClearStack(S); + break; + default : + Push(S, ch); + } + ch = getchar(); + } + b = S->base; + while(b != S->top) + { + printf("%c",*b); + b++; + } + ClearStack(S); + if( ch!=EOF) + ch = getchar(); + } + DestroyStack(S); +} +int main() +{ + SqStack s; + printf("input:\n"); + LineEdit(&s); + DestroyStack(&s); + return 0; +} From 2b6b398b5c8d6ed1a1481ff7d97318b8b52fb057 Mon Sep 17 00:00:00 2001 From: Han Jiang Date: Wed, 5 Apr 2017 16:07:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?tqh=E9=98=9F=E5=88=97=E7=9A=84=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E6=93=8D=E4=BD=9C=E3=80=81=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E6=B1=82=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tqh/2-1\347\256\227\346\263\225/Header.c" | 74 ------ .../tqh/2-1\347\256\227\346\263\225/Header.h" | 20 -- .../tqh/2-1\347\256\227\346\263\225/test.c" | 31 --- 2017-1/tqh/3-1-1.c | 105 -------- 2017-1/tqh/3-1-2.c | 118 --------- 2017-1/tqh/3-1-3.c | 108 -------- 2017-1/tqh/He.cpp | 248 ++++++++++++++++++ 2017-1/tqh/Li.cpp | 193 ++++++++++++++ 8 files changed, 441 insertions(+), 456 deletions(-) delete mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" delete mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" delete mode 100644 "2017-1/tqh/2-1\347\256\227\346\263\225/test.c" delete mode 100644 2017-1/tqh/3-1-1.c delete mode 100644 2017-1/tqh/3-1-2.c delete mode 100644 2017-1/tqh/3-1-3.c create mode 100644 2017-1/tqh/He.cpp create mode 100644 2017-1/tqh/Li.cpp diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" deleted file mode 100644 index e89398b2..00000000 --- "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.c" +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include"Header.h" - -void CreateList(LinkList *L,int n) -{ - LinkList p = NULL; - int i ; - *L = (LinkList)malloc(sizeof(LNode)); - (*L)->next = NULL; - for(i=0;idata); - p->next = (*L)->next; - (*L)->next = p; - } -} - //createlist - -void sortList(LinkList L,int n) -{ - int i=0; - int j=0; - LinkList head; - LinkList p1; - LinkList p2; - - for(i=0;inext; - for( j=0;jnext; - if( p1->data > p2->data){ - Elemtype temp = p1->data; - p1->data = p2 -> data; - p2->data = temp; - } - head = head->next; - } - } -} -void Traverse(LinkList L) -{ - LNode *p = L->next; - while(p){ - printf("%d ",p->data); - p = p->next; - } -} - -void MergeList_L(LinkList La,LinkList Lb,LinkList *Lc) -{ - LinkList pa,pb,pc; - pa = La->next; - pb = Lb->next; - *Lc = pc = La; - while(pa&&pb){ - if(pa->data <= pb->data){ - pc->next = pa; - pc = pa; - pa = pa->next; - } - else{ - pc->next = pb; - pc = pb; - pb =pb ->next; - } - } - pc->next = pa? pa:pb; - free(Lb); -} - - diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" "b/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" deleted file mode 100644 index d25fbace..00000000 --- "a/2017-1/tqh/2-1\347\256\227\346\263\225/Header.h" +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -#define OK 0 -#define ERROR 1 -#define OVERFLOW 2 - -typedef int Elemtype; - -typedef struct LNode{ - int data; - struct LNode *next; -}LNode,*LinkList; -//创建结构体及结构体指针 - -void CreateList(LinkList* ,int ); -void sortList(LinkList,int); -void Traverse(LinkList ); -void MergeList_L(LinkList ,LinkList ,LinkList *); - diff --git "a/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" "b/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" deleted file mode 100644 index 78c01290..00000000 --- "a/2017-1/tqh/2-1\347\256\227\346\263\225/test.c" +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include"Header.h" -#include - -int main() -{ - int i,j; - LinkList L1,L2,Lc; - - L1 =(LinkList) malloc(sizeof(LNode)); - L2 =(LinkList) malloc(sizeof(LNode)); - - printf("L1中值得个数:"); - scanf("%d",&i); - CreateList(&L1,i); - sortList(L1,i); - Traverse(L1); - printf("\n"); - - printf("L2中值得个数:"); - scanf("%d",&j); - CreateList(&L2,j); - sortList(L2,j); - Traverse(L2); - printf("\n"); - - MergeList_L(L1,L2,&Lc); - Traverse(Lc); - return OK; -} - diff --git a/2017-1/tqh/3-1-1.c b/2017-1/tqh/3-1-1.c deleted file mode 100644 index 8cba0d4f..00000000 --- a/2017-1/tqh/3-1-1.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -//#include - -#define STACK_INIT_SIZE 100 -#define STACKINCREMENT 10 - -typedef int SElemType; -typedef struct _SqStack { - SElemType *base; - SElemType *top; - int stacksize; -}SqStack; -typedef enum { - false , - true -}bool; - -typedef enum { - OK, - ERROR, - OVERFLOW -} Status; - -Status InitStack (SqStack *S); -Status conversion (SqStack *, int , int); -Status Push(SqStack *S, SElemType e); -Status Pop (SqStack *S,SElemType *e); -bool IsStackEmpty(SqStack *S); - -Status InitStack (SqStack *S) -{ - S->base = (SElemType *)malloc(STACK_INIT_SIZE * - sizeof(SElemType)); - if(!S->base) { - return OVERFLOW; - } - - S->top = S->base; - S->stacksize = STACK_INIT_SIZE; - - return OK; -} - -Status Push(SqStack *S,SElemType e) { - if((S->top-S->base)>=S->stacksize) { - return ERROR; - } - *S->top++ = e; - return OK; - }//入栈 - -Status Pop (SqStack *S,SElemType *e) -{ - if(IsStackEmpty(S)) - { - return ERROR; - } - - *e = *--S->top; - return OK; -} - -bool IsStackEmpty(SqStack *S) -{ - if(S){ - return S->base ==S->top; - } - return true; -} -Status conversion (SqStack *S, int input, int d) -{ - SElemType e; - if(d > 10) { - return ERROR; - } - - while (input) - { - Push(S,input % d); - input = input / d; - } - while (!IsStackEmpty(S)) - { - Pop(S,&e); - printf(" %d", e); - }//conversion - printf("\n"); - return OK; -} -int main(int argc,char* argv[]) -{ - SqStack S; - int input=1348; - int d = 8; - - /*srand(time(NULL)); - input = rand()%1024;*/ - - InitStack(&S);//制造空栈 - conversion (&S, input, d); - - return 0; -} - diff --git a/2017-1/tqh/3-1-2.c b/2017-1/tqh/3-1-2.c deleted file mode 100644 index 23c7e7a4..00000000 --- a/2017-1/tqh/3-1-2.c +++ /dev/null @@ -1,118 +0,0 @@ -#include - -#define M 1000 - -typedef int Elemtype; -typedef enum{ - ERROR, - OK -}Status; - - typedef struct Stack { - char string[M]; - Elemtype top; - }Stack; - //定义stack结构体类型 - void InitStack(Stack *s) - { - s->top = -1; - } - //结构体初始化 - Status PushStack(Stack *s, char ch) - { - if(s->top == M-1) { - return ERROR; - } - s->top++; - s->string[s->top] = ch; - return OK; - } - //入栈 - Status PopStack(Stack *s, char *ch) - { - if(s->top == -1) { - return ERROR; - } - *ch = s->string[s->top]; - s->top--; - return OK; - } - //出栈 - - Status GetTop(Stack *s, char *ch) - { - if(s->top == -1) { - return ERROR; - } - *ch = s->string[s->top]; - return OK; - } - //得到指定元素的值 - Status IsEmpty(Stack *s) - { - if(s->top == -1) - { - return OK; - } - else { - return ERROR; - } - } - //判断是否栈为空 -Elemtype MatchBracket(char ch1, char ch2) -{ - if(ch1 == '(' && ch2 == ')') { - return 1; - } - if(ch1 == '[' && ch2 == ']') { - return 1; - } - if(ch1 == '{' && ch2 == '}') { - return 1; - } - return 0; -} -//判断括号是否匹配 -int main() -{ - Stack s; - char str[M] = {0}, ch; - int i; - - InitStack(&s); - fprintf(stdout, "Input brackets:"); - fscanf(stdin, "%s", str); - for(i = 0; str[i] != 0; i++) { - switch(str[i]) { - case '(': - case '[': - case '{': - PushStack(&s, str[i]); - break; - case ')': - case ']': - case '}': - if(IsEmpty(&s)) { - printf("right bracket spilth.\n"); - return 0; - } else { - GetTop(&s, &ch); - if(MatchBracket(ch , str[i])) { - PopStack(&s, &ch); - } else{ - printf("left and right brackets are different.\n"); - return 0; - } - } - break; - default: - printf("Input error\n"); - } - } - if(IsEmpty(&s)) { - printf("Left and right brackets are matched.\n"); - } else { - printf("Left bracket spilth..\n"); - } - return 0; -} \ No newline at end of file diff --git a/2017-1/tqh/3-1-3.c b/2017-1/tqh/3-1-3.c deleted file mode 100644 index a71c9ee8..00000000 --- a/2017-1/tqh/3-1-3.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include - -#define STACK_INIT_SIZE 100 -#define STACKINCREMENT 10 - -typedef char SElemType; -typedef enum{ - ERROR, - OK, - OVERFLOW -}Status; - typedef struct { - SElemType *base; - SElemType *top; - int stacksize; - }SqStack; - //定义stack结构体类型 - - Status InitStack(SqStack *S); - Status Push(SqStack *S,SElemType e); - Status Pop(SqStack *S,SElemType *e); - Status ClearStack(SqStack *S); - Status DestroyStack(SqStack *S) ; - void LineEdit(SqStack *S); - -Status InitStack(SqStack *S) { - S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); - if(!S->base) { - return OVERFLOW; - } - - S->top = S->base; - S->stacksize = STACK_INIT_SIZE; - - return OK; - }//初始化栈 -Status Push(SqStack *S,SElemType e) { - if((S->top-S->base)>=S->stacksize) { - S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); - if(!S->base) { - return OVERFLOW; - } - S->top = S->base + S->stacksize; - S->stacksize += STACKINCREMENT; - } - *S->top++ = e; - return OK; - }//入栈 -Status Pop(SqStack *S,SElemType *e) { - if(S->top == S->base) - return ERROR; - *e = *--S->top; - return OK; - }//出栈 -Status ClearStack(SqStack *S) { - S->top = S->base; - return OK; - } -//清空栈 - Status DestroyStack(SqStack *S) { - S->top = S->base; - free(S->base); - S->top = NULL; - S->base = NULL; - return OK; - }//销毁栈 -void LineEdit(SqStack *S) -{ - //利用字符栈s,从终端接收一行并传送至调用过程的数据区 - char ch,c,*b; - InitStack(S); - ch = getchar(); - while( ch != EOF) - { - while(ch != EOF&&ch!='\n') - { - switch(ch) - { - case '#':Pop(S,&c); - break; - case '@':ClearStack(S); - break; - default : - Push(S, ch); - } - ch = getchar(); - } - b = S->base; - while(b != S->top) - { - printf("%c",*b); - b++; - } - ClearStack(S); - if( ch!=EOF) - ch = getchar(); - } - DestroyStack(S); -} -int main() -{ - SqStack s; - printf("input:\n"); - LineEdit(&s); - DestroyStack(&s); - return 0; -} diff --git a/2017-1/tqh/He.cpp b/2017-1/tqh/He.cpp new file mode 100644 index 00000000..c11586c7 --- /dev/null +++ b/2017-1/tqh/He.cpp @@ -0,0 +1,248 @@ +#include +#include + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 + +typedef char SElemType; + +typedef enum{ + ERROR, + OK, + OVERFLOW +}Status; + typedef struct { + int top; + int stacksize; + SElemType stack[STACK_INIT_SIZE]; + double data[STACK_INIT_SIZE]; + }SqStack; + //定义stack结构体类型 + Status InitStack(SqStack *S); + Status Push(SqStack *S,SElemType e); + Status Pop(SqStack *S,SElemType *e); + Status ClearStack(SqStack *S); + Status DestroyStack(SqStack *S) ; + Status GetTop(SqStack *S,SElemType ); + Status EmptyStack(SqStack *S); + int GetLength(SqStack S); + void TranslateExpress(char s1[],char s2[]); + double ComputeExpress(char a[]); + +Status InitStack(SqStack *S)//将栈S初始化为空栈 +{ + int i; + S->top = 0; + for (i = 0;i < STACK_INIT_SIZE;i++) + { + S->data[i] = 0; + } + return OK; +} +Status EmptyStack(SqStack *S)//判断栈是否为空,栈为空返回1,否则返回0 +{ + if(0 == S->top) + { + return OK; + } + else + { + return ERROR; + } +} +Status GetTop(SqStack S,SElemType *e)//取栈顶元素,将栈顶元素值返回给e,并返回1表示成功,返回0表示失败 +{ + if(S.top <= 0) + { + printf("栈已经空!\n"); + return ERROR; + } + else + { + *e = S.stack[S.top-1];//取栈顶元素 + return OK; + } +} +Status Push(SqStack *S,SElemType e)//进栈操作 +//将元素e进栈,元素进栈成功返回1,否则返回0 +{ + if(S->top >= STACK_INIT_SIZE-1) + { + printf("栈已满,不能入栈!"); + return ERROR; + } + else + { + S->stack[S->top] = e; + S->top++; + return OK; + } +} +Status Pop(SqStack *S,SElemType *e)//出栈操作 +{ + if(S->top <= 0) + { + printf("栈已经没有元素,不能出栈!\n"); + return ERROR; + } + else + { + S->top--; + *e = S->stack[S->top]; + return OK; + } +} +int GetLength(SqStack S)//返回栈长度 +{ + return S.top; +} +Status ClearStack(SqStack *S)//清空栈 +{ + S->top = 0; + return OK; +} +void TranslateExpress(SElemType s1[],SElemType s2[]) +{ + SqStack s; + char ch; + SElemType e; + int i = 0,j = 0; + InitStack(&s); + ch = s1[i]; + i++; + while( ch != '\0') + { + switch(ch){ + case '(' : + Push(&s,ch); + break; + case ')' : + while(GetTop(s,&e) && e != '(') + { + Pop(&s,&e); + s2[j] = e; + j++; + } + Pop(&s,&e);//将左括号出栈 + break; + case '+' : + case '-' : + while (GetTop(s,&e) && e !='(') + { + Pop(&s,&e); + s2[j]= e; + j++; + } + Push(&s,ch);//当前运算符进栈 + break; + case '*' : + case '/' : + while(!EmptyStack(&s) && GetTop(s,&e) && e == '/' || e == '*') + { + Pop(&s,&e); + s2[j]= e; + j++; + } + Push(&s,ch);//当前运算符进栈 + break; + default : + while(ch >= '0'&&ch <= '9') + { + s2[j] = ch; + j++; + ch = s1[i]; + i++; + } + i--; + s2[j] = ' '; + j++; + } + ch = s1[i]; + i++; + //读入下一个字符,准备处理 + } + while(!EmptyStack(&s))//将栈中所有剩余的运算符出栈,送入数组s2中 + { + Pop(&s,&e); + s2[j]= e; + j++; + } + s2[j]= '\0'; +} +double ComputeExpress(SElemType a[]) +{ + double val,num1,num2,result; + int i = 0; + SqStack s; + s.top = -1; + while (a[i] != '\0') + { + if (a[i] !=' ' && a[i] >='0' &&a[i] <='9') + { + val = 0; + while (a[i] != ' ') + { + val = val*10 + a[i]- '0'; + i ++; + } + s.top++; + s.data[s.top] = val; + } + else + { + switch(a[i]) + { + case '+': + num1 = s.data[s.top]; + s.top--; + num2 = s.data[s.top]; + s.top--; + result = num1+num2; + s.top++; + s.data[s.top] = result; + break; + case '-': + num1 = s.data[s.top]; + s.top--; + num2 = s.data[s.top]; + s.top--; + result = num2-num1; + s.top++; + s.data[s.top] = result; + break; + case '*': + num1 = s.data[s.top]; + s.top--; + num2 = s.data[s.top]; + s.top--; + result = num1*num2; + s.top++; + s.data[s.top] = result; + break; + case '/': + num1 = s.data[s.top]; + s.top--; + num2 = s.data[s.top]; + s.top--; + result = num2/num1; + s.top++; + s.data[s.top] = result; + break; + } + i++; + } + } + return result; +} +int main() +{ + SElemType a[STACK_INIT_SIZE],b[STACK_INIT_SIZE]; + double f; + printf("请输入一个表达式:"); + gets(a); + TranslateExpress(a,b); + printf("后缀表达式是:%s\n",b); + f = ComputeExpress(b); + printf("计算结果是:%.2lf\n",f); + return 0; +} diff --git a/2017-1/tqh/Li.cpp b/2017-1/tqh/Li.cpp new file mode 100644 index 00000000..9a7b1426 --- /dev/null +++ b/2017-1/tqh/Li.cpp @@ -0,0 +1,193 @@ +#include +#include + +typedef int QElemType; +typedef struct QNode +{ + QElemType data; + struct QNode *next; +}QNode,*QueuePtr; +typedef struct +{ + QueuePtr front; + QueuePtr rear; +}LinkQueue; +typedef enum{ + OK, + ERROR, + OVERFLOW +}Status; + +Status InitQueue (LinkQueue*Q); +Status DestroyQueue (LinkQueue Q); +Status EnQueue (LinkQueue *Q,QElemType e); +Status DeQueue (LinkQueue Q,QElemType *e); +Status CreateQueue(LinkQueue*L,int n); +Status Travel(LinkQueue Q); +Status backTravel(QueuePtr,QueuePtr); +Status ClearQueue(LinkQueue Q); +Status GetHead (LinkQueue Q,QElemType e); +int QueueEmpty(QueuePtr,QueuePtr); +int GetLength (LinkQueue Q); + + +Status InitQueue (LinkQueue*Q) +{ + Q->front = NULL; + Q->rear = NULL; + return OK; +} +Status DestroyQueue (LinkQueue*Q) +{ + QueuePtr temp; + while(Q->front) + { + temp = Q->front ->next; + free(Q->front); + Q->front = temp; + } + return OK; +} +Status EnQueue (LinkQueue *Q,QElemType e) +{ + QueuePtr p = (QueuePtr) malloc (sizeof(QNode)); + if (!p) + return OVERFLOW; + p->data = e; + p ->next = NULL; + if(Q->front!=NULL) + { + Q->rear->next = p; + } + else + { + Q->front=p; + } + Q->rear = p; + return OK; +} +Status DeQueue (LinkQueue*Q,QElemType *e) +{ + QueuePtr p; + if (Q->front == NULL) + { + return ERROR; + } + p= Q->front; + *e = p->data; + Q->front = p->next; + free(p); + return OK; +} +Status Travel(LinkQueue Q) +{ + QueuePtr p = Q.front; + printf("\n正向遍历:\n"); + while(p != NULL) + { + printf("%d ",p->data); + p = p->next; + } + printf("\n"); + return OK; +} +//已知队尾元素,反向遍历到队首 +Status backTravel(QueuePtr start,QueuePtr end) +{ + if(start!=end) + { + backTravel(start->next,end); + } + printf("%d ",start->data); + return OK; +} +Status CreateQueue(LinkQueue*L,int n) +{ + printf("\n输入数据:"); + QueuePtr p = NULL; + int i ; + L->front = NULL; + for(i=0;idata); + if(i==0)L->rear=p; + p->next = L->front; + L->front = p; + } + return OK; +} +int QueueEmpty(QueuePtr start,QueuePtr end) +{ + if(start ==end) + { + return 1; + } + else + { + return 0; + } +} +int GetLength (LinkQueue Q) +{ + QueuePtr p; + int n=0; + p = Q.front; + while(p != NULL) + { + n++; + p = p->next; + } + return n; +} +Status GetHead (LinkQueue Q,QElemType e) +{ + if(!QueueEmpty) + { + e = Q.front->data; + return OK; + } + else + { + return ERROR; + } +} +Status ClearQueue(LinkQueue *Q) +{ + QueuePtr p,q; + Q->rear = Q->front; + p = Q->front; + Q->front = NULL; + while(p) + { + q = p; + p=p->next; + free(q); + } + return OK; +} +int main () +{ + LinkQueue Q={0,0}; + int n; + QElemType e=7,s; + InitQueue (&Q); + printf("请输入数据个数:"); + scanf("%d",&n); + + CreateQueue(&Q,n); + printf("\n输出长度:%d\n", GetLength(Q)); + + Travel(Q); + printf("反向遍历:\n"); + backTravel(Q.front,Q.rear); + + printf("\n"); + EnQueue (&Q,e); + + Travel(Q); + printf("反向遍历:\n"); + backTravel(Q.front,Q.rear); + + DestroyQueue(&Q); + return 0; +} \ No newline at end of file From 427d750817638681f99604a411e251ad5c6ece35 Mon Sep 17 00:00:00 2001 From: Han Jiang Date: Wed, 12 Apr 2017 21:05:14 +0800 Subject: [PATCH 3/4] _ --- 2017-1/tqh/2-12/Header.c | 118 +++++++++++++++++++++++++++++++++++++++ 2017-1/tqh/2-12/Header.h | 20 +++++++ 2017-1/tqh/2-12/test.c | 12 ++++ 2017-1/tqh/2-13/2-13.c | 95 +++++++++++++++++++++++++++++++ 2017-1/tqh/3-2-1/3-2-1.c | 112 +++++++++++++++++++++++++++++++++++++ 2017-1/tqh/3-2-2/3-2-2.c | 118 +++++++++++++++++++++++++++++++++++++++ 2017-1/tqh/3-2-3/3-2-3.c | 108 +++++++++++++++++++++++++++++++++++ 7 files changed, 583 insertions(+) create mode 100644 2017-1/tqh/2-12/Header.c create mode 100644 2017-1/tqh/2-12/Header.h create mode 100644 2017-1/tqh/2-12/test.c create mode 100644 2017-1/tqh/2-13/2-13.c create mode 100644 2017-1/tqh/3-2-1/3-2-1.c create mode 100644 2017-1/tqh/3-2-2/3-2-2.c create mode 100644 2017-1/tqh/3-2-3/3-2-3.c diff --git a/2017-1/tqh/2-12/Header.c b/2017-1/tqh/2-12/Header.c new file mode 100644 index 00000000..224e3bec --- /dev/null +++ b/2017-1/tqh/2-12/Header.c @@ -0,0 +1,118 @@ +#include +#include"Header.h" +#include +//随机创建链表 +void CreateList(LinkList *L,int n) +{ + LinkList p = NULL; + int i ; + *L = (LinkList)malloc(sizeof(LNode)); + (*L)->next = NULL; + srand((unsigned)time( NULL ) ); + for(i=0;idata);*/ + p->data = rand()%1024; + p->next = (*L)->next; + (*L)->next = p; + } +}//createlist + +//链表从小到大排序 +void SortList(LinkList L,int n) +{ + int i=0; + int j=0; + LinkList head; + LinkList p1; + LinkList p2; + + for(i=0;inext; + for( j=0;jnext; + if( p1->data > p2->data){ + Elemtype temp = p1->data; + p1->data = p2 -> data; + p2->data = temp; + } + head = head->next; + } + } +} + +//遍历链表 +void Traverse(LinkList L) +{ + LNode *p = L->next; + while(p){ + printf("%d ",p->data); + p = p->next; + } +} + +//链表合并成一个新链表 +void MergeList_L(LinkList La,LinkList Lb,LinkList *Lc) +{ + LinkList pa,pb,pc; + pa = La->next; + pb = Lb->next; + *Lc = pc = La; + while(pa&&pb){ + if(pa->data <= pb->data){ + pc->next = pa; + pc = pa; + pa = pa->next; + } + else{ + pc->next = pb; + pc = pb; + pb =pb ->next; + } + } + pc->next = pa? pa:pb; + free(Lb); +} + +//将主函数中的一些操作综合,简化主函数 +void ShowList(LinkList *L1,LinkList *L2) +{ + int i,j; + LinkList Lc; + *L1 =(LinkList) malloc(sizeof(LNode)); + *L2 =(LinkList) malloc(sizeof(LNode)); + + printf("L1中值得个数:"); + scanf("%d",&i); + + CreateList(L1,i); + printf("\n排序前遍历L1:\n"); + Traverse(*L1); + printf("\n"); + + SortList(*L1,i); + printf("\n排序后遍历L1:\n"); + Traverse(*L1); + printf("\n"); + + printf("\nL2中值得个数:"); + scanf("%d",&j); + + CreateList(L2,j); + printf("\n排序前遍历L2:\n"); + Traverse(*L2); + printf("\n"); + + SortList(*L2,j); + printf("\n排序后遍历L2:\n"); + Traverse(*L2); + printf("\n"); + + printf("\n合并后遍历:\n"); + MergeList_L(*L1,*L2,&Lc); + Traverse(Lc); +} + diff --git a/2017-1/tqh/2-12/Header.h b/2017-1/tqh/2-12/Header.h new file mode 100644 index 00000000..8c55ab0f --- /dev/null +++ b/2017-1/tqh/2-12/Header.h @@ -0,0 +1,20 @@ +#include +#include + +#define OK 0 +#define ERROR 1 +#define OVERFLOW 2 + +typedef int Elemtype; + +typedef struct LNode{ + int data; + struct LNode *next; +}LNode,*LinkList; +//创建结构体及结构体指针 + +void CreateList(LinkList* ,int ); +void SortList(LinkList,int); +void Traverse(LinkList ); +void MergeList_L(LinkList ,LinkList ,LinkList *); +void ShowList(LinkList *,LinkList *); diff --git a/2017-1/tqh/2-12/test.c b/2017-1/tqh/2-12/test.c new file mode 100644 index 00000000..6b032ffe --- /dev/null +++ b/2017-1/tqh/2-12/test.c @@ -0,0 +1,12 @@ +#include +#include"Header.h" +#include + +int main() +{ + int i,j; + LinkList L1,L2; + ShowList (&L1,&L2); + return OK; +} + diff --git a/2017-1/tqh/2-13/2-13.c b/2017-1/tqh/2-13/2-13.c new file mode 100644 index 00000000..dd6dcd3d --- /dev/null +++ b/2017-1/tqh/2-13/2-13.c @@ -0,0 +1,95 @@ +#include +#include +#include + +typedef struct LNode{ + int data; + struct LNode *next; +}LNode,*LinkList; + +void CreateList (LinkList *L,int n) +{ + LinkList p = (LinkList) malloc(sizeof(LNode)); + LinkList temp = p; + srand((unsigned)time( NULL ) ); + for(;n!=0;--n){ + p->next = (LinkList)malloc(sizeof(LNode)); + p->next->data = rand()%1024; + p=p->next; + } + p->next = NULL; + *L = temp->next; + free(temp); +}//createlist + +void Traverse1 (LinkList L) +{ + LNode *p = L; + while(p) { + printf("%d ",p->data); + p = p->next; + } + printf("\n"); +} +void Traverse2 (LinkList L) +{ + LNode *p = L->next; + do{ + printf("%d ",p->data); + p = p->next; + }while(p != L->next); + printf("\n"); +} +void SplitList(LinkList L,LinkList*pL1,LinkList*pL2) +{ + *pL1=(LNode*)malloc(sizeof(LNode)); + (*pL1)->data = 0; + (*pL1)->next = NULL; + *pL2=(LNode*)malloc(sizeof(LNode)); + (*pL2)->data = 0; + (*pL2)->next = NULL; + LinkList p,rear1 = *pL1,rear2=*pL2; + int count=0; + for(p = L;p != NULL;p = p->next) + { + ++count; + if(count%2) + { + (*pL1)->data++; + rear1->next = p; + rear1 = p; + } + else + { + (*pL2)->data++; + rear2->next = p; + rear2 = p; + } + } + rear1->next = (*pL1)->next; + rear2->next = (*pL2)->next; +} +int main() +{ + LinkList L,L1 = NULL,L2 = NULL; + int n; + + srand((unsigned)time( NULL ) ); + n = rand()%9+2; + printf("数据的总个数为: %d\n",n); + /*scanf("%d",&n);*/ + CreateList(&L,n); + printf("待拆分的链表:\n"); + Traverse1(L); + + SplitList(L,&L1,&L2); + printf("\n遍历链表L1:\n"); + Traverse2(L1); + printf("\n遍历链表L2:\n"); + Traverse2(L2); + return 0; +} +//程序又算法2-12修改得到,新增核心函数SplitList +//整个程序中,时间复杂度应在SplitList函数中体现,再拆分链表时有一个一重for循环的遍历, +//故时间复杂度应为o(n) +//空间复杂度在核心函数中用p1,p2,rear1,rear2辅助创建链表。 \ No newline at end of file diff --git a/2017-1/tqh/3-2-1/3-2-1.c b/2017-1/tqh/3-2-1/3-2-1.c new file mode 100644 index 00000000..24fa65b4 --- /dev/null +++ b/2017-1/tqh/3-2-1/3-2-1.c @@ -0,0 +1,112 @@ +#include +#include +#include + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 + +typedef int SElemType; +typedef struct _SqStack { + SElemType *base; + SElemType *top; + int stacksize; +}SqStack; +typedef enum { + false , + true +}bool; + +typedef enum { + OK, + ERROR, + OVERFLOW +} Status; + +Status InitStack (SqStack *S); +Status conversion (SqStack *, int , int); +Status Push (SqStack *S, SElemType e); +Status Pop (SqStack *S,SElemType *e); +bool IsStackEmpty (SqStack *S); + +Status InitStack (SqStack *S) +{ + S->base = (SElemType *)malloc(STACK_INIT_SIZE * + sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + + S->top = S->base; + S->stacksize = STACK_INIT_SIZE; + + return OK; +}//初始化栈 + +Status Push (SqStack *S,SElemType e) { + if((S->top-S->base)>=S->stacksize) { + return ERROR; + } + *S->top++ = e; + return OK; +}//入栈 + +Status Pop (SqStack *S,SElemType *e) +{ + if(IsStackEmpty(S)) + { + return ERROR; + } + + *e = *--S->top; + return OK; +}//出栈 + +bool IsStackEmpty (SqStack *S) +{ + if(S) { + return S->base ==S->top; + } + return true; +}//判断栈是否为空 + +Status conversion (SqStack *S, int input, int d) +{ + SElemType e; + if(d > 10) { + return ERROR; + } + + while (input) + { + Push(S,input % d); + input = input / d; + } + while (!IsStackEmpty(S)) + { + Pop(S,&e); + printf("%d", e); + } + printf("\n\n"); + return OK; +}//数制转换的实现 + +int main(int argc,char* argv[]) +{ + SqStack S; + int input=1348; + int d,i; + srand(time(NULL)); + //随机进行五次进制转换 + for(i = 0;i < 5;i ++) { + d = rand ()%8+2;//d的取值应为小于10大于1的整数 + input = rand()%1024; + + printf("随机十进制数为:%d\n",input); + printf("需要转化为%d进制\n",d); + InitStack(&S); + printf("转化后为:"); + conversion (&S, input, d); + } + return 0; +} + diff --git a/2017-1/tqh/3-2-2/3-2-2.c b/2017-1/tqh/3-2-2/3-2-2.c new file mode 100644 index 00000000..23c7e7a4 --- /dev/null +++ b/2017-1/tqh/3-2-2/3-2-2.c @@ -0,0 +1,118 @@ +#include + +#define M 1000 + +typedef int Elemtype; +typedef enum{ + ERROR, + OK +}Status; + + typedef struct Stack { + char string[M]; + Elemtype top; + }Stack; + //定义stack结构体类型 + void InitStack(Stack *s) + { + s->top = -1; + } + //结构体初始化 + Status PushStack(Stack *s, char ch) + { + if(s->top == M-1) { + return ERROR; + } + s->top++; + s->string[s->top] = ch; + return OK; + } + //入栈 + Status PopStack(Stack *s, char *ch) + { + if(s->top == -1) { + return ERROR; + } + *ch = s->string[s->top]; + s->top--; + return OK; + } + //出栈 + + Status GetTop(Stack *s, char *ch) + { + if(s->top == -1) { + return ERROR; + } + *ch = s->string[s->top]; + return OK; + } + //得到指定元素的值 + Status IsEmpty(Stack *s) + { + if(s->top == -1) + { + return OK; + } + else { + return ERROR; + } + } + //判断是否栈为空 +Elemtype MatchBracket(char ch1, char ch2) +{ + if(ch1 == '(' && ch2 == ')') { + return 1; + } + if(ch1 == '[' && ch2 == ']') { + return 1; + } + if(ch1 == '{' && ch2 == '}') { + return 1; + } + return 0; +} +//判断括号是否匹配 +int main() +{ + Stack s; + char str[M] = {0}, ch; + int i; + + InitStack(&s); + fprintf(stdout, "Input brackets:"); + fscanf(stdin, "%s", str); + for(i = 0; str[i] != 0; i++) { + switch(str[i]) { + case '(': + case '[': + case '{': + PushStack(&s, str[i]); + break; + case ')': + case ']': + case '}': + if(IsEmpty(&s)) { + printf("right bracket spilth.\n"); + return 0; + } else { + GetTop(&s, &ch); + if(MatchBracket(ch , str[i])) { + PopStack(&s, &ch); + } else{ + printf("left and right brackets are different.\n"); + return 0; + } + } + break; + default: + printf("Input error\n"); + } + } + if(IsEmpty(&s)) { + printf("Left and right brackets are matched.\n"); + } else { + printf("Left bracket spilth..\n"); + } + return 0; +} \ No newline at end of file diff --git a/2017-1/tqh/3-2-3/3-2-3.c b/2017-1/tqh/3-2-3/3-2-3.c new file mode 100644 index 00000000..96f71ba0 --- /dev/null +++ b/2017-1/tqh/3-2-3/3-2-3.c @@ -0,0 +1,108 @@ +#include +#include + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 + +typedef char SElemType; +typedef enum{ + ERROR, + OK, + OVERFLOW +}Status; +typedef struct { + SElemType *base; + SElemType *top; + int stacksize; +}SqStack; +//定义stack结构体类型 + +Status InitStack(SqStack *S); +Status Push(SqStack *S,SElemType e); +Status Pop(SqStack *S,SElemType *e); +Status ClearStack(SqStack *S); +Status DestroyStack(SqStack *S) ; +void LineEdit(SqStack *S); + +Status InitStack(SqStack *S) { + S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + + S->top = S->base; + S->stacksize = STACK_INIT_SIZE; + + return OK; +}//初始化栈 +Status Push(SqStack *S,SElemType e) { + if((S->top-S->base)>=S->stacksize) { + S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); + if(!S->base) { + return OVERFLOW; + } + S->top = S->base + S->stacksize; + S->stacksize += STACKINCREMENT; + } + *S->top++ = e; + return OK; +}//入栈 +Status Pop(SqStack *S,SElemType *e) { + if(S->top == S->base) + return ERROR; + *e = *--S->top; + return OK; +}//出栈 +Status ClearStack(SqStack *S) { + S->top = S->base; + return OK; +} +//清空栈 +Status DestroyStack(SqStack *S) { + S->top = S->base; + free(S->base); + S->top = NULL; + S->base = NULL; + return OK; +}//销毁栈 +void LineEdit(SqStack *S) +{ + //利用字符栈s,从终端接收一行并传送至调用过程的数据区 + char ch,c,*b; + InitStack(S); + ch = getchar(); + while( ch != EOF) + { + while(ch != EOF&&ch!='\n') + { + switch(ch) + { + case '#':Pop(S,&c); + break; + case '@':ClearStack(S); + break; + default : + Push(S, ch); + } + ch = getchar(); + } + b = S->base; + while(b != S->top) + { + printf("%c",*b); + b++; + } + ClearStack(S); + if( ch!=EOF) + ch = getchar(); + } + DestroyStack(S); +} +int main() +{ + SqStack s; + printf("input:\n"); + LineEdit(&s); + DestroyStack(&s); + return 0; +} From 2e90217445c6b87e6ace01bc13017cf51bb1c2f2 Mon Sep 17 00:00:00 2001 From: Han Jiang Date: Wed, 26 Apr 2017 22:38:43 +0800 Subject: [PATCH 4/4] =?UTF-8?q?tqh=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2017-1/tqh/Traverse.c | 90 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 2017-1/tqh/Traverse.c diff --git a/2017-1/tqh/Traverse.c b/2017-1/tqh/Traverse.c new file mode 100644 index 00000000..3ab33fe7 --- /dev/null +++ b/2017-1/tqh/Traverse.c @@ -0,0 +1,90 @@ +#include +#include +typedef char TElemType; +typedef struct BiTNode { + TElemType data; + BiTNode *lchild,*rchild; +}BiTNode,*BiTree; +typedef enum { + ERROR, + OK, + OVERFLOW +}Status; + +Status CreateBitree (BiTree *T,int i); +Status PostOrderTraverse(BiTree T); +Status InOrderTraverse(BiTree T); +Status PostOrderTraverse(BiTree T); + +char*s[]={"ABDG###EH##I#K##C#F##","ABD#F###C#E#G##"};int si[]={0,0}; + +Status CreateBitree (BiTree *T,int i) +{ + char ch; + //scanf("%c",&ch); + ch=s[i][si[i]++]; + if(ch == '#') + *T =NULL; + else{ + if(! (*T = (BiTNode *)malloc(sizeof(BiTNode)) )) + exit(OVERFLOW); + (*T)->data = ch; + CreateBitree(&(*T)->lchild,i); + CreateBitree(&(*T) ->rchild,i); + } + return OK; +} +Status PreOrderTraverse(BiTree T) +{ + if(T){ + printf("%c",T->data); + PostOrderTraverse(T->lchild); + PostOrderTraverse(T->rchild); + } + return OK; +} +Status InOrderTraverse(BiTree T) +{ + if(T){ + PostOrderTraverse(T->lchild); + printf("%c",T->data); + PostOrderTraverse(T->rchild); + } + return OK; +} +Status PostOrderTraverse(BiTree T) +{ + if(T){ + PostOrderTraverse(T->lchild); + PostOrderTraverse(T->rchild); + printf("%c",T->data); + } + return OK; +} +int main() +{ + BiTree tree[]={NULL,NULL}; + int i; + for(i=0;i!=2;++i) + { + printf("%s\n",s[i]); + + CreateBitree(&tree[i],i); + + printf("%-6s","pre:"); + PreOrderTraverse(tree[i]); + printf("\n"); + + printf("%-6s","in:"); + InOrderTraverse(tree[i]); + printf("\n"); + + printf("%-6s","post:"); + PostOrderTraverse(tree[i]); + printf("\n"); + + printf("\n"); + } + + return 0; +}