From 1ec53b500a2448dbffd330eb14999cf78d86c809 Mon Sep 17 00:00:00 2001 From: byswez <1769119199@qq.com> Date: Sat, 17 Jun 2017 21:13:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E6=AC=A1=E6=80=A7=E6=8F=90=E4=BA=A4w?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=B0=9A=E6=9C=AA=E6=8F=90=E4=BA=A4=E7=9A=84?= =?UTF-8?q?=E4=BA=94=E6=AC=A1=E4=BD=9C=E4=B8=9AQAQ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...213\344\272\214\345\217\211\346\240\221.c" | 63 +++ ...226\350\276\221\347\250\213\345\272\217.c" | 195 +++++++ ...276\345\274\217\346\261\202\345\200\274.c" | 508 ++++++++++++++++++ ...276\350\241\250\346\213\206\345\210\206.c" | 180 +++++++ ...276\350\241\250\345\256\236\347\216\260.c" | 198 +++++++ 5 files changed, 1144 insertions(+) create mode 100644 "2017-1/byswsz/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221.c" create mode 100644 "2017-1/byswsz/\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217/3.2.3-\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217.c" create mode 100644 "2017-1/byswsz/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.c" create mode 100644 "2017-1/byswsz/\351\223\276\350\241\250\346\213\206\345\210\206/\351\223\276\350\241\250\346\213\206\345\210\206.c" create mode 100644 "2017-1/byswsz/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260.c" diff --git "a/2017-1/byswsz/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221.c" "b/2017-1/byswsz/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221.c" new file mode 100644 index 00000000..c858dfd2 --- /dev/null +++ "b/2017-1/byswsz/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221/\345\273\272\347\253\213\344\272\214\345\217\211\346\240\221.c" @@ -0,0 +1,63 @@ +#include +#include +typedef char TElemType; +typedef int Status; + +int count = 0; + + +//二叉树的二插链表的存储表示; +typedef struct BiTnode { + TElemType data; + struct BiTNode *lchild, *rchild;//左右孩子指针; + +}BiTnode, *BiTree; +// + + + +Status CreateBiTree(BiTree *T, char *c) +{ + TElemType ch; + ch = c[count]; + count++; + if (ch == '*') + { + *T = NULL; + } + else + { + if (!(*T = (BiTree)malloc(sizeof(BiTnode)))) + { + exit(-1); + } + (*T)->data = ch;//生成根结点 + CreateBiTree(&(*T)->lchild, c);//构造左子树 + CreateBiTree(&(*T)->rchild, c);//构造右子树 + } + return 1; + } +void postorderTraversal(BiTree T) +{ + if (T == NULL) + { + printf("*"); + return; + } + postorderTraversal(T->lchild); + postorderTraversal(T->rchild); + printf("%c ", T->data); + } + + + +int main() +{ + BiTree t; + TElemType c[20]; + scanf("%s", c); + CreateBiTree(&t, c); + printf("后续遍历的顺序为\n"); + postorderTraversal(t); + return 0; +} diff --git "a/2017-1/byswsz/\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217/3.2.3-\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217.c" "b/2017-1/byswsz/\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217/3.2.3-\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217.c" new file mode 100644 index 00000000..3343983f --- /dev/null +++ "b/2017-1/byswsz/\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217/3.2.3-\350\241\214\347\274\226\350\276\221\347\250\213\345\272\217.c" @@ -0,0 +1,195 @@ +#include +#include +#include +#include +#define SIZE 100 //存储空间初始分配量 + +#define STACKINCREMENT 10 //存储空间分配增量 +typedef int Status; +typedef char SElemType; +//对顺序栈进行定义 +typedef struct Sq_Stack { + + SElemType *base; + + SElemType *top; + + int stacksize; +} SqStack; +//申明 +typedef enum { + + OK, + ERROR, + OVERFLOW, + TRUE, + FALSE , +} Status; + + + + +/*#define OVERFLOW +#define OK +#define +#define +#define ERROR*/ +Status InitStack(SqStack *pS);//构造空栈 +SElemType Pop(SqStack *pS, SElemType *pe);//返回栈顶元素; +Status Push(SqStack *pS, SElemType e);//插入新元素; +Status StackEmpty(SqStack *pS);//遇上@之后清空栈之后判断是否清空完 +Status DestroyStack(SqStack *pS);//遇上#,销毁栈; + +Status InitStack(SqStack *pS) { + + (*pS).base = (SElemType *)malloc(SIZE * sizeof(SElemType)); + + if (!(*pS).base) + exit (OVERFLOW); //存储分配失败 + + (*pS).top = (*pS).base; + + (*pS).stacksize = SIZE; + + return OK; + +} + + + +SElemType Pop(SqStack *pS, SElemType *pe) { + + if ((*pS).top == (*pS).base) return ERROR; + + pe = --(*pS).top; + + return *pe; +} + + + +Status Push(SqStack *pS, SElemType e) { + + if ((*pS).top - (*pS).base >= (*pS).stacksize) { + + (*pS).base = (SElemType *)realloc((*pS).base, ((*pS).stacksize + STACKINCREMENT) * sizeof(SElemType)); + + if (!(*pS).base) exit (OVERFLOW); + + (*pS).top = (*pS).base + (*pS).stacksize; + + (*pS).stacksize += STACKINCREMENT; + + } + + *(*pS).top++ = e; + + return OK; + +} + + + +Status DestroyStack(SqStack *pS) { + + (*pS).top = NULL; + + (*pS).stacksize = 0; + + free((*pS).base); + + return OK; + +} + + + +Status StackEmpty(SqStack *pS) { + + if ((*pS).base == (*pS).top) return TRUE; + + else return FALSE; + +} +// +void Lineedit() { + + int i = 0; + + char ch[200] = "whli##ilr#e(s#*s)\noutchar@\nputchar(*s=#++)\0"; + //拟输入 + SqStack S; + + SElemType e = ch[i]; + + InitStack(&S); //构造空栈 + + while (ch[i] != '\0') { + + e = ch[i]; + + switch (ch[i]) { + + case '#': + + Pop(&S, &e); break; + + case '@': { + + if (StackEmpty(&S)) break; + + while (e != '\n') { Pop(&S, &e); }; + + if (StackEmpty(&S) || e == '\n') { Push(&S, e); break; } break; + + }//重置为空栈 + + default: + + Push(&S, ch[i]); break;//有效字符进栈 + + }; + + i++; + + //将从栈底到栈顶的栈内字符传送至调用过程的数据区 + + + + }; + + char pa[100]; + + int j = 0; + + while (!StackEmpty(&S)) { + + pa[j] = Pop(&S, &e); + + j++; + + };//排除#和@情况之后对其进行输入到缓冲区 + + do { + + j--; + + printf("%c", pa[j]); + + } while (j >= 0); + + DestroyStack(&S); + +}//将合格的字符进行输出 + +int main() { + + Lineedit(); + + return OK; + +} + + + + diff --git "a/2017-1/byswsz/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.c" "b/2017-1/byswsz/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.c" new file mode 100644 index 00000000..b1188b75 --- /dev/null +++ "b/2017-1/byswsz/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274/\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.c" @@ -0,0 +1,508 @@ +#include +#include +#include + + +#define STACK_INIT_SIZE 100 +#define STACKINCREMENT 10 +#define overflow -2 +#define ok 1 +#define error 0 +typedef int Status; +typedef char SElemtype; +typedef int Elemtype; +typedef struct { + + SElemtype*base; + + SElemtype*top; + + int stacksize; + +}OPTR;//运算符栈 + +typedef struct { + + Elemtype*base; + + Elemtype*top; + + int stacksize; + +}OPND;//运算数栈 + +//运算符栈 +//Status Initstack(OPTR*s);//初始化栈 +// +//Status Gettop(OPTR*s);//获取栈顶元素 +// +//Status Push(OPTR*s, SElemtype e);//入栈 +// +//Status Pop(OPTR*s, SElemtype *e);//删除栈中元素 +// +//Status Destorystack(OPTR*s);//销毁栈 +// +////运算数栈 +//Status Initstack(OPND*s);//初始化栈 +// +//Status Gettop(OPND*s);//获取栈顶元素 +// +//Status Push(OPND*s, SElemtype e);//入栈 +// +//Status Pop(OPND*s, SElemtype *e);//删除栈中元素 +// +//Status Destorystack(OPND*s);//销毁栈 +// +// +////表达式求值 +// +////输入表达式并计算 +// +//Elemtype EvaluateExpression(OPTR*OPTR, OPND*OPND); +// +//SElemtype Precede(char topc, char c);//判断运算符优先级 +// +//Elemtype Operate(Elemtype a, SElemtype theta, Elemtype b);//计算部分表达式的值 +// +//Elemtype In(char c, char op[]);//判断输入的字符是不是运算符 + +// 初始化两个栈 +Status InitstackTR(OPTR*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 InitstackND(OPND*s) + +{ + + s->base = (Elemtype*)malloc(STACK_INIT_SIZE * sizeof(Elemtype)); + + if (!s->base) + + { + + return overflow; + + } + + s->top = s->base; + + s->stacksize = STACK_INIT_SIZE; + + return ok; + +} + +//获取栈顶元素 + +Status GettopTR(OPTR*s) + +{ + + if (s->top == s->base) + + { + + return error; + + } + + return *(s->top - 1); + +} + +Status GettopND(OPND*s) + +{ + + if (s->top == s->base) + + { + + return error; + + } + + return *(s->top - 1); + +} + +//入栈 + +Status PushTR(OPTR*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 error; + + } + + s->top = s->base + s->stacksize; + + s->stacksize += STACKINCREMENT; + + } + + *s->top++ = e; + + return ok; + +} + +Status PushND(OPND*s, SElemtype e) + +{ + + if ((s->top - s->base) >= s->stacksize) + + { + + s->base = (Elemtype*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(Elemtype)); + + if (!s->base) + + { + + return error; + + } + + s->top = s->base + s->stacksize; + + s->stacksize += STACKINCREMENT; + + } + + *s->top++ = e; + + return ok; + +} + +//删除元素 + +Status PopTR(OPTR*s, SElemtype*e) + +{ + + if (s->top == s->base) + + { + + return error; + + } + + *e = *--s->top; + + return ok; + +} + +Status PopND(OPND*s, SElemtype*e) + +{ + + if (s->top == s->base) + + { + + return error; + + } + + *e = *--s->top; + + return ok; + +} + +//销毁栈 + +Status DestorystackTR(OPTR*s) + +{ + + s->top = s->base; + + free(s->base); + + s->top = NULL; + + s->base = NULL; + + return ok; + +} + +Status DestorystackND(OPND*s) + + +{ + + s->top = s->base; + + free(s->base); + + s->top = NULL; + + s->base = NULL; + + return ok; + +} + +//判断输入的字符是不是运算符 + +Elemtype In(char c, char op[]) + +{ + int i, f = 0; + for (i = 0; i < 7; i++) + { + if (c == op[i]) + { +f = i; +break; +} + //输入的字符与数据库中的字符进行对比 +} + + if (f == 0) + + { +return 0; +} +else return 1; + +} + +//根据表比较运算符优先级 + +SElemtype Precede(char topc, char c) + +{ + + if (topc == '+' || topc == '-') + + { + + if (c == '+' || c == '-' || c == ')' || c == '#') + + { + + return '>'; + + } + + else return '<'; + + } + + if (topc == '*' || topc == '/') + + { + + if (c == '(') + + { + + return '<'; + + } + + else return '>'; + + } + + if (topc == '(') + + { + + if (c == ')') + + { + + return '='; + + } + + else return '<'; + + } + + if (topc == ')') + + { + + return ')'; + + } + + if (topc == '#') + + { + + if (c == '#') + + { + + return '='; + + } + + else return '<'; + + } + +} + +//对表达式进行求值 + +Elemtype Operate(Elemtype a, SElemtype theta, Elemtype b) + +{ + + switch (theta) + + { + + case '+':return a + b; break; + + case '-':return a - b; break; + + case'*':return a*b; break; + + case'/':return a / b; break; + + } + +} + +//整个的运行算法 + +Elemtype EvaluateExpression(OPTR*OPTR, OPND*OPND) + +{ + + SElemtype c, theta, x; + + Elemtype a, b, v; + + SElemtype op[7] = { '+','-','*','/','(',')','#' }; + + InitstackTR(OPTR); + + InitstackND(OPND); + + PushTR(OPTR, '#'); + + printf("输入表达式: "); + + c = getchar(); + + while (c != '#' || GettopTR(OPTR) != '#') + + { + + if (!In(c, op)) + + { + + PushND(OPND, c - '0'); + + c = getchar(); + + } + + else + + { + + switch (Precede(GettopTR(OPTR), c)) + + { + + case'<'://栈顶元素优先级低 + + PushTR(OPTR, c); + + c = getchar(); + + break; + + case'>'://栈顶元素优先级高 + + PopTR(OPTR, &theta); + + PopND(OPND, &b); + + PopND(OPND, &a); + + v = Operate(a, theta, b); + + PushND(OPND, v); + + break; + + case'=': + + PopTR(OPTR, &x); + + c = getchar(); + + break; + + } + + } + + } + + return GettopND(OPND); + +} + +int main() + +{ + + OPND OPND; + + OPTR OPTR; + + int result; + + result = EvaluateExpression(&OPTR, &OPND); + + printf("表达式结果为: %d\n", result); + + system("pause"); + + return 0; + +} \ No newline at end of file diff --git "a/2017-1/byswsz/\351\223\276\350\241\250\346\213\206\345\210\206/\351\223\276\350\241\250\346\213\206\345\210\206.c" "b/2017-1/byswsz/\351\223\276\350\241\250\346\213\206\345\210\206/\351\223\276\350\241\250\346\213\206\345\210\206.c" new file mode 100644 index 00000000..d51cd47e --- /dev/null +++ "b/2017-1/byswsz/\351\223\276\350\241\250\346\213\206\345\210\206/\351\223\276\350\241\250\346\213\206\345\210\206.c" @@ -0,0 +1,180 @@ +#include + +#include + +#include + + +typedef enum { + + ok, + + error, + + overflow + +}Status; + +typedef int Elemtype; + +typedef struct Node + +{ + + Elemtype data; + + struct Node*next; + +}Node, *Linklist; + +Status CreatList(Linklist L, int n); + +Status TravelList(Linklist L); + +Status chaifenList(Linklist L, Linklist L1, Linklist L2); + +Status CreatList(Linklist L,int n) + +{ + + printf("创建长度为%d的链表:\n",n); + + L->next = NULL; + + Linklist p; + + Elemtype i; + + for (i = 0; i < n; i++) + + { + + p = (Linklist)malloc(sizeof(Node)); + + p->data = i; + + p->next = L->next; + + L->next = p; + + } + + return ok; + +} + +Status TravelList(Linklist L) + +{ + + printf("遍历链表:\n"); + + Linklist p ; + + p = L->next; + + while (p) + + { + + printf("%d ", p->data); + + p = p->next; + + } + + printf("\n"); + + return ok; + +} + +Status chaifen(Linklist List, Linklist L1, Linklist L2) + +{ + + int count = 0; + + printf("拆分链表: \n"); + + L1->data = 0; + + L2->data = 0; + + L1->next = L2->next = NULL; + + Linklist p = List->next; + + while (p) + + { + + Linklist temp = (Linklist)malloc(sizeof(Node)); + + count++; + + if (count % 2 == 1)//序号为奇数 + + { + + L1->data++; + + temp->data = p->data; + + temp->next = L1->next; + + L1->next = temp; + + } + + if (count % 2 == 0)//序号为偶数 + + { + + L2->data++; + + temp->data = p->data; + + temp->next = L2->next; + + L2->next = temp; + + } + + p = p->next; + + } + + + + return ok; + +} + +int main() + +{ + + int n = 10; + + Linklist L=(Linklist)malloc(sizeof(Node)); + + Linklist L1 = (Linklist)malloc(sizeof(Node)); + + Linklist L2 = (Linklist)malloc(sizeof(Node)); + + CreatList (L,n); + + TravelList(L); + + chaifen(L, L1, L2); + + printf("奇数序号元素有: %d位", L1->data); + + TravelList(L1); + + printf("偶数序号元素有: %d位", L2->data); + + TravelList(L2); + +} \ No newline at end of file diff --git "a/2017-1/byswsz/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260.c" "b/2017-1/byswsz/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260.c" new file mode 100644 index 00000000..78b5d9f1 --- /dev/null +++ "b/2017-1/byswsz/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260/\351\230\237\345\210\227\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260.c" @@ -0,0 +1,198 @@ +#include +typedef int QElemtype; +//队列的链式储存结构 +typedef struct QNode + +{ + + QElemtype data; + + struct QNode *next; + +}QNode, *QNodePtr; + +typedef struct + +{ + + QNodePtr front; + + QNodePtr rear; + +}LinkQueue; + +typedef enum + +{ + + OK, + + OVERFLOW + +}Status; +//构造一个构造空队列Q + +Status InitQueue(LinkQueue *Q) + +{ + + printf("初始化一个队列\n"); + + Q->front = Q->rear = (QNodePtr)malloc(sizeof(QNode)); + + if (!Q->front) + + { + + return OVERFLOW; + + } + + Q->front->next = NULL; + + return OK; + +} + +//插入e为Q的新的队尾元素 + +Status EnQueue(LinkQueue *Q, QElemtype e) + +{ + + QNodePtr s = (QNodePtr)malloc(sizeof(QNode)); + + if (!s) + + { + + return OVERFLOW; + + } + + s->data = e; + + s->next = NULL; + + Q->rear->next = s; + + Q->rear = s; + + return OK; + +} + +//若队列不空,则删除Q的队头元素,并用e返回其值,并且返回OK +Status DeQueue(LinkQueue *Q, QElemtype *e) + +{ + + QNodePtr p = NULL; + + if (Q->rear == Q->front) + + { + + return OVERFLOW; + + } + + p = Q->front->next; + + *e = p->data; + + Q->front->next = p->next; + + if (p == Q->rear) + + { + + Q->rear = Q->front; + + } + + printf("销毁的头元素为:%d\n", *e); + + free(p); + + return OK; + +} + +//销毁队列Q + +Status Destory(LinkQueue*Q) + +{ + + printf("销毁队列\n"); + + while (Q->front) + + { + + Q->rear = Q->front->next; + + free(Q->front); + + Q->front = Q->rear; + + } + + return OK; + +} +// +Status Traverse(LinkQueue*Q) + +{ + + if (Q->front == Q->rear) + + { + + return OVERFLOW; + + } + + printf("遍历队列:\n"); + + QNodePtr p = Q->front->next; + + while (p) + + { + + printf("%d ", p->data); + + p = p->next; + + } + + printf("\n"); + + return OK + ; + +} + +int main() + +{ + + int i, result; + + LinkQueue Q; + + InitQueue(&Q); + + for (i = 0; i < 5; i++) + + { + EnQueue(&Q, i); + } + Traverse(&Q); + DeQueue(&Q, &result); + Traverse(&Q); + return 0; +} \ No newline at end of file