C语言 用栈实现 括号匹配

符号匹配(50分)
题目内容:
判断输入的括号字符串是否匹配,
括号有()、[]、{}、<>四种,
匹配的定义如下:
(1) 空字符串为匹配。
(2) 若S为匹配字符串,则(S)、[S]、{S}、为匹配自串。
(3) 两个匹配字符串串接亦为匹配字符串。

输入格式:
输入第一行为一个数字T,代表测试数据的笔数。
接下来会有T笔测试数据,每一笔测试数据一行。
每一笔测试数据的字符串长度不超过2000字符。
T < 1000

输出格式:
输出一行数字,输出测资中有多少匹配字符串。

输入样例:
5
()
<><>[]

([{[]}])
<()){}

输出样例:
4

c

3个回答

麻烦楼主采纳一下,谢谢^^


 /*** Seqstack.h **/
 #pragma once

#define MAXSIZE 1024

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct SStack
{
    void* data[MAXSIZE]; //保存数据的数组
    int size;
};

typedef void* SeqStack;

#ifdef __cplusplus
extern "C"{
#endif

    //初始化
    SeqStack Init_SeqStack();
    //入栈
    void Push_SeqStack(SeqStack stack,void *data);
    //出栈
    void Pop_SeqStack(SeqStack stack);
    //获得栈顶元素
    void* Top_SeqStack(SeqStack stack);
    //获得栈中元素个数
    int Size_SeqStack(SeqStack stack);
    //销毁栈
    void Destroy_SeqStack(SeqStack stack);


#ifdef __cplusplus
}
#endif

/***Seqstack.cpp**/
#include"SeqStack.h"

//初始化
SeqStack Init_SeqStack()
{
    //一般情况下,只要开辟内存空间都要初始化
    struct SStack *stack = malloc(sizeof(struct SStack));
    for (int i = 0; i < MAXSIZE;++i)
    {
        stack->data[i] = NULL;
    }

    //memset(stack->data, 0, MAXSIZE * sizeof(void *));

    stack->size = 0;

    return stack;
}
//入栈
void Push_SeqStack(SeqStack stack, void *data)
{
    if (NULL == stack)
    {
        return;
    }

    if (NULL == data)
    {
        return;
    }

    struct SStack *s = (struct SStack *)stack;

    if (s->size == MAXSIZE)
    {
        return;
    }

    s->data[s->size] = data;
    s->size++;

}
//出栈
void Pop_SeqStack(SeqStack stack)
{
    if (NULL == stack)
    {
        return;
    }

    struct SStack *s = (struct SStack *)stack;

    if (s->size == 0)
    {
        return;
    }

    s->size--;

}
//获得栈顶元素
void* Top_SeqStack(SeqStack stack)
{
    if (NULL == stack)
    {
        return NULL;
    }

    struct SStack *s = (struct SStack *)stack;

    if (s->size == 0)
    {
        return NULL;
    }

    return s->data[s->size - 1];

}
//获得栈中元素个数
int Size_SeqStack(SeqStack stack)
{
    if (NULL == stack)
    {
        return -1;
    }

    struct SStack *s = (struct SStack *)stack;

    return s->size;
}
//销毁栈
void Destroy_SeqStack(SeqStack stack)
{
    if (NULL == stack)
    {
        return;
    }

    free(stack);
    stack = NULL;
}

/****main.c*****/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"SeqStack.h"

int IsLeft(char ch)
{
    return ch == '(';
}

int IsRight(char ch)
{
    return ch == ')';
}

void printError(const char *str, char *pos)
{
    printf("%s\n",str);
    int dis = pos - str;
    for (int i = 0; i < dis; ++i)
    {
        printf(" ");
    }
    printf("A\n");

}

void test()
{
    const char *str = "5+5*(6)+9/3(*1)-(1)+3()";


    char *p = (char *)str;

    //创建栈
    SeqStack stack = Init_SeqStack();

    while (*p != '\0')
    {

        //如果是左括号,入栈
        if (IsLeft(*p))
        {
            Push_SeqStack(stack, p);
        }

        //如果是右括号
        if (IsRight(*p))
        {

            if (Size_SeqStack(stack) > 0)
            {
                Pop_SeqStack(stack);
            }
            else
            {
                //printf("没有匹配的左括号!\n");
                printError(str, p);
            }

        }

        ++p;
    }


    //如果栈不为空,栈中剩下的是左括号
    while (Size_SeqStack(stack) > 0)
    {
        //printf("左括号没有匹配的右括号!\n");
        printError(str,  (char *)Top_SeqStack(stack) );
        Pop_SeqStack(stack);
    }

    //销毁栈
    Destroy_SeqStack(stack);

}

int main(){

    test();

    system("pause");
    return EXIT_SUCCESS;
}

楼主你自己根据我写的函数类似写出另外几个括号就可以了


baidu_36822230
子瑜子墨 好的谢谢指教
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言用栈检测括号匹配问题,弄了半天没弄好,不知道哪里不对,求大神指导。

#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S) { S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } Status StackEmpty(SqStack *S) //判断栈是否为空,若为空返回TURE,否返回FALSE { if(S->top!=S->base) return ERROR; return OK; } Status Push(SqStack *S,SElemType e) //插入元素e为新栈顶元素 { if(S->top-S->base>=S->stacksize) //栈满追加空间 { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if (!S->base) exit(OVERFLOW); //存储分配失败 S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } Status GetTop(SqStack *S,SElemType *e) //栈不空用e返回栈顶元素,并返回OK 否则返回ERROR { if(S->top==S->base) return ERROR; *e=*(S->top-1); return OK; } Status Pop(SqStack *S,SElemType*e) //栈不空删除S栈顶元素,用e返回其值,并返回OK,否则返回ERROR { if(S->top==S->base) return ERROR; *e=*--S->top; return OK; } Status Bracket(SqStack *S,char *str) //检测括号匹配 { int i=0,flag1=0,flag2; SElemType e; while(str[i]!='\0') { switch(str[i]) { case '(':{Push(S,'(');break;}//入栈 case '[':{Push(S,'[');break;} case '{':{Push(S,'{');break;} case ')':{ if(GetTop(S,&e)=='(') //是否与栈顶元素相等 Pop(S,&e); //出栈 else flag1=1; break; } case ']':{ if(GetTop(S,&e)=='[') Pop(S,&e); else flag1=1; break; } case '}':{ if(GetTop(S,&e)=='{') Pop(S,&e); else flag1=1; break; } default: break; } if(flag1) break; i++; } flag2=StackEmpty(S); //栈是否为空并将返回值值赋给flag2 if(!flag1 && flag2) printf("括号匹配正确!\n"); else printf("括号匹配失败!\n"); return OK; } int main() { char a,flag='y'; while(flag=='y') { char str[255]; SqStack S; InitStack(&S); printf("请输入带括号的表达式:\n"); scanf("%s",str); scanf("%c",&a); Bracket(&S,str); printf("是否要再次输入?(Enter y again):\n "); scanf("%c",&flag); printf("\n"); } printf("close.\n"); }

c语言栈的应用【括号匹配问题】

代码运行结果永远是正确,弄了好久没解决 ``` #include<stdio.h> #define MaxSize 50 typedef struct//顺序栈 { char data[MaxSize]; int top; }SqStack; bool StackEmpty(SqStack &S)//判断栈空 { if(S.top==-1) return true; else return false; } bool Push(SqStack &S,char x)//压栈 { if(S.top==MaxSize) return false; S.data[++S.top]=x; return true; } bool Pop(SqStack &S,char x)//出栈 { if(S.top==-1) return false; x=S.data[S.top--]; return true; } bool GetTop(SqStack &S,char x)//读取栈顶元素 { if(S.top==-1) return false; x=S.data[S.top]; return true; } void InitStack(SqStack &S)//栈的初始化 { S.top=-1; } void main() { int i,x; SqStack S; char a[20]; InitStack(S); for(i=0;i<20;i++) { scanf("%c",&a[i]); } for(i=0;i<20;i++) { if(a[i]=='{'||a[i]=='['||a[i]=='(') Push(S,a[i]); if(a[i]=='}'||a[i]==']'||a[i]==')') if(StackEmpty(S)) { printf("右括号比左括号多"); return; } else { GetTop(S,x); if(x=='{'&&a[i]=='}'||x=='['&&a[i]==']'||x=='('&&a[i]==')') { Pop(S,x); Pop(S,x); continue; } else { printf("左右括号配对次序不正确"); return; } } } if(StackEmpty(S)) { printf("左右括号配对正确"); return; } else { printf("左括号比右括号多"); return; } } ```

用栈判断表达式中的括号是否匹配(c语言)

//判断一个算术表达式的圆括号是否正确配对 #include <stdio.h> #define MAXSIZE 1000 typedef char datatype; typedef struct Stack{ datatype elements[MAXSIZE]; int Top; }stacky; stacky *SetnullS(stacky *S){ S->Top=-1; return S; } int Empty(stacky *S){ if(S->Top==0) return 1; else return 0; } stacky *push(stacky *S,datatype e){ if(S->Top>=MAXSIZE-1){ printf ("overflow"); return NULL; } else { S->Top++; S->elements[S->Top]=e; } return S; } stacky*pop(stacky *S){ S->Top--; return S; } int Scan(stacky *S,char a[]){ int i; for(i=0;i<7;i++){ if(a[i]=='(') push(S,a[i]); else if(a[i]==')'){ pop(S); } } if(S->Top==0) return 1; else return 0; } void main(){ int key; char a[100]={'(',')','(',')'}; stacky *S; SetnullS(S); //gets(a); key=Scan(S,a); if(key==1) printf("match"); else printf("unmatch"); } 请问这个程序哪里出错了呢··运行不了

数据结构——括号匹配(栈和队列)

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。 **我的代码如下:** ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 21 typedef struct { int top; DataType data; }qstack; //初始化为栈空 void InitStack(qstack *s) { s->top=-1; } //判空 int StackEmpty(qstack *s) { return s->top==-1; } //入栈 void Push (qstack *s,DataType x) { s->top++; s->data[s->top]=x; } //出栈 前判空 DataType Pop (qstack *s) { DataType x;//存放出栈元素 if(StackEmpty(s)) printf("Stack underflow!") x=s->date[s->top]; s->top--; return x; } //匹配 int Match(ElemType e,ElemType ch) { if(e == '('&&ch == ')') { return 1; } else if(e == '['&&ch == ']') { return 1; } else if(e == '{'&&ch == '}') { return 1; } else { return 0; } } //判断 int main() { char str[N]; qstack *s; InitStack(s); scanf("%s",str); for(int i=0;;i++) { switch(str[i]) case "(": case "[": case "{":Push(s,str[i]); break; case ")": case "]": case "}":if(StackEmpty(s)) printf("NO"); else if(Match(str[i-1],str[i])) Pop(s,str[i]); break; default:break; } if(StackEmpty(s)) printf("YES"); return 0; } ``` 麻烦大佬帮我调试一下,全是基础问题,刚接触,谢谢各位大大!

括号匹配栈的应用问题,还有哪里不对?

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: > sin(10+20) 输出样例1: > yes 输入样例2: > {[}] 输出样例2: > no **不知道为什么第三个测试点总是通不过……试了一晚上,有大神知道怎么改吗? ** ![图片说明](https://img-ask.csdn.net/upload/202005/16/1589635851_201181.png) ``` #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[101],check[101]; int i,top=-1,flag=1,flag2=0; char temp; scanf("%s",str); for(i=0;i<=strlen(str);i++){ if(str[i]=='('||str[i]=='['||str[i]=='{') { flag2++; top++; check[top]=str[i]; } else if(str[i]==']'||str[i]==')'||str[i]=='}') { flag2++; if(top==-1) {flag=0;break;} temp=check[top];top--; if ((str[i] == ')'&& temp !='(' )|| (str[i] == ']'&& temp != '[') || (str[i] == '}'&& temp!= '{')) {flag=0;break;} } } if(flag2==0) {printf("no");return 0;} if(flag==0||top!=-1) printf("no"); else printf("yes"); return 0; } ```

关于数据结构括号匹配的问题

程序写完了,但是一运行就崩了,我不知道错误在哪,求大神指教!下面贴出我的代码: #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; #define SIZE 100 typedef struct StackNode{ char data; struct StackNode *next; }StackNode,*LinkStack; void InitStack(LinkStack &S); void Push(LinkStack &S,char e); void Pop(LinkStack &S,char &e); bool StackEmpty(LinkStack &S); char GetTop(LinkStack &S); void Matching(char Carray[]); void mud(LinkStack &S,char Carray[]); void main(){ LinkStack S; char Carray[SIZE]; cout<<"请输入一串括号并以#号结束:"; gets(Carray); puts(Carray); Matching(Carray); // if(!StackEmpty(S)) cout<<"栈已空"; //else cout<<"未空"; } void InitStack(LinkStack &S){ //构造一个空栈 S=NULL; } void Push(LinkStack &S,char e){ //压入栈 LinkStack p; p=new StackNode; p->data=e; p->next=S; S=p; } void Pop(LinkStack &S,char &e){ //弹出栈 LinkStack p; if(S==NULL){ printf("该栈已空\n"); exit(1); } p=S; e=S->data; S=S->next; delete p; } bool StackEmpty(LinkStack &S){ //判断栈是否已空 if(S==NULL) return true; else return false; } char GetTop(LinkStack &S){ //返回桟顶元素 return S->data; } void Matching(char Carray[]){ char x; int flag=1,i=0; LinkStack S; InitStack(S); while(Carray[i]!='#'&&flag){ switch(Carray[i]){ case '[' || '(': Push(S,Carray[i]); break; case ']': x=GetTop(S); if(x=='[') Pop(S,x); else flag=0; break; case ')': x=GetTop(S); if(x=='(') Pop(S,x); else flag=0; break; } i++; } if(!StackEmpty(S)&& flag) cout<<"括号匹配"; else cout<<"括号不匹配"; }

数据结构括号匹配问题求助!

求大神帮看看程序哪里有问题(数据结构括号匹配),程序能运行,但是不管输入什么都显示匹配? ``` #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; const int STACK_INIT_SIZE=100; const int STACKINCREMENT=10; typedef char SElemType; typedef struct { SElemType *elem; int top; int stacksize; int increment; }SqStack; // 初始化栈 void InitStack(SqStack&S,int maxsize=STACK_INIT_SIZE,int incresize=STACKINCREMENT) { S.elem=new SElemType[STACK_INIT_SIZE]; S.top=-1; S.stacksize=maxsize; S.increment=incresize; } //入栈 void Push(SqStack&S,SElemType e) { if(S.top==S.stacksize) { S.stacksize=S.stacksize+STACKINCREMENT; SElemType *elem=new SElemType[S.stacksize]; for(int i=0;i<=S.top;i++) elem[i]=S.elem[i]; delete []S.elem; S.elem=elem; } S.elem[++S.top]=e; } //检查空栈 bool StackEmpty(SqStack S) { if(S.top==-1) return true; else return false; } //取栈顶元素 bool GetTop(SqStack S,SElemType &e) { if(S.top==-1) return false; e=S.elem[S.top]; return true; } //让栈顶元素出栈 bool Pop(SqStack &S,SElemType&e) { if(S.top==-1) return false; e=S.elem[S.top]; S.top--; return true; } //括号匹配 bool matching(char exp[]) { SqStack S; InitStack(S); int state=1; char e; char ch=*exp++; while(ch != '#' &&state) {switch(ch) { switch (ch) { case'(': case'[': case'{': { Push(S, ch); break; } case')': { if (!StackEmpty(S) && GetTop(S,e)== '(') Pop(S, e); else state = 0; break;} case']': { if (!StackEmpty(S) && GetTop(S,e) == '[') Pop(S, e); else state = 0; break;} case'}': { if (!StackEmpty(S) && GetTop(S,e) == '{') Pop(S, e); else state = 0; break;} } default:break; } ch=*exp++; } if(state&&StackEmpty(S)) return true; else return false; } //主函数 int main () { int max=50;//数组容量 char a[max]; cout<<"输入括号表达式(以“#”结尾)"<<endl; cin>>a; if(matching(a)) { cout<<"括号匹配"<<endl; cout<<"\n"; } else cout<<"括号不匹配"<<endl; } ```

php 用栈 做符号匹配 错误 求分析

我想用两个数组实现表达式的四则运算 但是不知道为什么 代码有bug 我分析不出原因 求大神指教

c语言switch这么用对吗,怎么没有语法错误,但是一运行就错误。

#include "stdio.h" #include<stdlib.h> #include "malloc.h" #define OK 1 #define OVERFLOW -1 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef char ElemType; typedef int Status; typedef struct { ElemType *base; ElemType *top; int stacksize; }SqStack; Status InitStack(SqStack&S) { S.base=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); S.top=S.base; S.stacksize=LIST_INIT_SIZE; return OK; } Status StackEmpty(SqStack S) { if(S.base==S.top) return 1; else return 0; } Status EmpyStack(SqStack S,ElemType e) { e=*(S.top-1) ; return OK; } Status Push(SqStack&S,ElemType e) { if (S.top-S.base>=S.stacksize) {S.base=(ElemType*)realloc(S.base,(S.stacksize+LISTINCREMENT*sizeof(ElemType))); S.top=S.base+S.stacksize; S.stacksize+=LISTINCREMENT; } *S.top++=e; return OK;} Status Pop(SqStack &S,ElemType e) { if(S.top==S.base) return ERROR; e = * --S.top; return OK; } void OutputStack(SqStack &S) {ElemType *q; q=S.top-1; for(int i=0;i<S.top-S.base;i++) { printf("%3d ",*q);q--;} } int main() { int a,b,c ; char m; char ch[100],*p;int e; SqStack S; InitStack(S); printf("\n请选择一个字符:"); getchar(); scanf("%c",&m); switch(m){ case '1': { printf("请输入要进栈的元素个数是:"); scanf("%d",&a); printf("\n请输入要进栈的%d个元素:",a); for(b=0;b<a;b++) { scanf("%d",&c); Push(S,c); } printf("\n请选择一个字符:"); getchar(); scanf("%c",&m); printf("\n输出的栈为:"); OutputStack(S); EmpyStack(S,c); printf("\n栈顶元素为:%d",c); printf("\n输出的栈为:"); OutputStack(S); Pop(S,c); printf("\n删除的栈顶元素:%d",c); printf("\n输出的栈为:"); OutputStack(S); printf("\n"); } case '2': p=ch; printf("输一个含义有()[]{}的括号表达式:\n"); gets(ch); while(*p) { switch (*p) { case '{': case '[': case '(': Push(S,*p++);break;//只要是左括号就入栈 case '}': case ']': case ')': Pop(S,e); if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')')) p++; else {printf("括号不匹配!");exit(OVERFLOW);} break; default :p++;//其他字符就后移 } } if (StackEmpty(S)) printf("括号匹配成功"); else printf("缺少右括号!"); printf("\n"); break; } }

C语言小白 编译运行无误。求大神看一下为什么最后运行时输入等号回车后没有结果?

#include<stdio.h> #include<stdlib.h> #include<math.h> #define TRUE 1 #define FALSE 0 #define ERROR 0 #define MAXSIZE 100 typedef char DataType; typedef struct { DataType data[MAXSIZE]; int top; }SqStack; int InitStack(SqStack &S) { //构造一个空栈 S.top= -1; return 1; } int StackEmpty(SqStack S) //判栈为空栈时返回值为真,反之为假 { return(S.top==-1? TRUE:FALSE);} int StackFull(SqStack S) //判栈为满栈时返回值为真,反之为假 { return(S.top==MAXSIZE-1?TRUE:FALSE);} int Push(SqStack &S, DataType e) { //将元素e插入到栈中,作为的新栈顶 if(StackFull(S)) return ERROR; //栈满 S.top++; // top加1,栈顶位置上移 S.data[S.top]=e; //数据e存入当前栈顶 return 1; } int Pop(SqStack &S,DataType &e) {//若栈不为空,则删除栈顶元素 if(StackEmpty(S)) return ERROR; //栈空 e=S.data[S.top]; //取出数据放入e所指单元中 S.top--; // top减1,栈顶位置下移 return 1; } DataType GetTop(SqStack S) {//若栈不为空,则取栈顶元素 DataType e; if(StackEmpty(S)) return ERROR; //栈空 e=S.data[S.top]; //取出数据,top不变 return e; } typedef char DataType; int bracketmatching() { SqStack S; DataType ch; InitStack(S); while ((ch=getchar())!='\n') { switch (ch) //遇左括号入栈;遇到右括号时,分别检测匹配情况 { case '(': case '[': case '{': Push(S,ch);break; case ')': if (StackEmpty(S)) return FALSE; else { Pop(S,ch); if (ch!= '(') return FALSE; } break; case ']': if (StackEmpty(S)) return FALSE; else { Pop(S,ch); if (ch!= '[') return FALSE; } break; case '}': if (StackEmpty(S)) return FALSE; else { Pop(S,ch); if (ch!='{') return FALSE; } break; default:break; } } if (StackEmpty(S)) return TRUE; else return FALSE; } int In(char ch) /*判断字符ch是否为算符*/ { int i,flag=0; char op[7]={'+','-','*','/','(',')','='}; /*算符数组*/ for (i=0;i<7;i++) if(ch==op[i]) { flag=1; break; } return flag; } DataType Operate(DataType a,char theta,DataType b) { DataType z; switch (theta) { case '+':z=a+b;break; case '-':z=a-b;break; case '*':z=a*b;break; case '/':z=a/b;break; } return(z); } char Precede (char a,char b) /*比较两个运算符的优先级*/ { char z; if((b=='+')||(b=='-')||(b=='*')||(b=='/')|| (b=='(')||(b==')') ||(b=='=')) switch (a) {case '+': case '-': if((b=='*')||(b=='/')||(b=='(')) z='<'; else z='>'; break; case '*': case '/': if(b=='(') z='<'; else z='>';break; } return z; } float CaculateExpression(char *str) { //算术表达式求值的算符优先算法。设optr和opnd分别为算符栈和操作数栈, //OP为算符集合 char a,b,theta,x,u; SqStack optr,opnd; char *p; int k; InitStack(optr); Push(optr, '='); InitStack(opnd); p=str;//c=getchar(); while(*p!='=' ||GetTop(optr)!='=') { if(!In(*p)) { u=0; k=0;//统计小数位数 while(*p>='0'&&*p<='9'||*p=='.') { if(*p!='.')u=u*10+*p-'0'; if(*p=='.'||k>0) k++; p++; } if(k>0) u=u/pow(10,k-1); Push(opnd,u); } //不是算符则进栈 else switch(Precede(GetTop(optr),*p)) { case '<' : //栈顶算符优先级低 Push(optr,*p); p++;//c=getchar(); break; case '=' : //优先级相同,脱去括号并读入下一字符 Pop(optr,x); p++;//c=getchar(); break; case '>' : //栈顶算符优先级高,退栈并将运算结果入栈 Pop(optr,theta); Pop(opnd,b);Pop(opnd,a); Push(opnd,Operate(a,theta,b)); break; }} return GetTop(opnd); } int JudgeExpression(char *str) { char*p; p=str; while(*p!='\0') p++; p--; if(*p!='=') { printf("表达式要以等号结束!"); return 0; } return 1; } int main() { char str[81]; printf("请输入表达式:"); scanf("%s",str); if(JudgeExpression(str)) printf("%s%f\n",str,CaculateExpression(str)); return 0; }

求大神帮忙在我的代码(栈,C/C++,简单的四则运算)上修改一下,代码和要求都在楼下!

已经用C语言的栈写出个位数的四则运算,但不知道怎么修改成支持小数和多位数甚至可以sin,log,绝对值等数学运算,就类似于科学计算器,只要求控制台界面简单的输入就好,求大神帮忙在我的基础上修改,谢谢了! #include<stdio.h> #include<stdlib.h> #define newp (inn *)malloc(sizeof(inn)) //定义一个申请栈地址的宏 typedef struct stack { char data;//存入数据类型为字符 struct stack *next;//建立指针 }inn; //建立栈类型 int judge(char x) //比较优先级函数 { if(x=='+'||x=='-') return 0; else if(x=='*'||x=='/') return 1; else if(x=='#'||x=='('||x==')') return -1; } int main() { int flag = 1; while(flag) { printf("尾部不需要添加任何符号即可计算: "); inn *p,*top; //栈指针和栈顶指针 int number[50];//存入数字的数组 int i=0; char c; p = newp;//s开空间,newp为宏定义 p->data='#';//头指针第一个字符为# p->next = NULL;//初始化头指针里的next指针 top = p;//top跟p一起,接着新开的p的next指向top,栈用链表顺序不一样 c = getchar();//之后是读取中缀表达式的部分,用字符一个一个的读 while(c!='\n')//直到读到回车结束 { if(c>='0' && c<='9')//如果输入的是数字,存入数字数组(number) { i++;//加完后i=1 number[i] = c-48;//字符转数字存入数组 } else if(c=='(')//如果是左括号,直接进栈 { p = newp; //s开空间,newp为宏定义 p->data = c;//把左括号字符存入 p->next = top;//指针指向栈顶指针 top = p;//top指向p,到后面读从top往回读直到p->next = NULL } else if(c==')') //如果是右括号,匹配左括号,把两者之间的栈内符号全部弹出 { while(top->data!='(')//首先判断左括号,然后从左括号开始到右括号所有字符弹出 { p = top;//从左括号开始,用于计算完后p的地址释放空间 if(top->data=='+') { number[i-1]=number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1]=number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1]=number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next;//遍历链表 free(p);//释放空间 } p = top;//此时p用于指向空间便于下一步释放空间 top = top->next;//top++ free(p); } else //否则就是+-*/了 { int a =judge(c),b = judge(top->data);//比较该符号和栈顶符号优先级 if(a>b) //如果大于直接压进去 { p = newp;//开空间 p->data = c; p->next = top; top = p; } else //否则就把栈顶的符号一直弹出,直到弹到可以压进去(也就是说等于也不能压进去) { while(a<=b) { p = top;//从左括号开始,用于计算完后p的地址释放空间 if(top->data=='+') { number[i-1]=number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1]=number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1]=number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next;//遍历链表 free(p);//释放空间 b = judge(top->data); } p = newp;//开空间 p->data = c;//存入字符 p->next = top; top = p; } } c = getchar();//读取下一个字符 } while(top->data!='#')//读完还没有结束,还要把栈内剩余的所有符号挨个弹出 { p = top; if(top->data=='+') { number[i-1] = number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1] = number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1] = number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next; free(p); } printf("结果 = %d\n",number[i]); printf("\n是否需要继续输入?输入任何个位数字继续 / 0则退出\n"); scanf("%d",&flag); c = getchar(); } return 0; }

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

MIPS单周期CPU-组成原理实验-华中科技大学

使用logisim布线完成的MIPS单周期CPU,可支持28条指令。跑马灯的代码已经装入了寄存器,可以直接开启时钟运行。

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

基于QT和OpenCV的五子棋实现源码

一个简单的五子棋应用,基于QT和OpenCV的实现源码,通过相邻棋子判断是否获胜,不包含人工智能算法,适合新手入门

Git 实用技巧

这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

JAVA初级工程师面试36问(完结)

第三十一问: 说一下线程中sleep()和wait()区别? 1 . sleep()是让正在执行的线程主动让出CPU,当时间到了,在回到自己的线程让程序运行。但是它并没有释放同步资源锁只是让出。 2.wait()是让当前线程暂时退让出同步资源锁,让其他线程来获取到这个同步资源在调用notify()方法,才会让其解除wait状态,再次参与抢资源。 3. sleep()方法可以在任何地方使用,而wait()只能在同步方法或同步块使用。 ...

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

智鼎(附答案).zip

并不是完整题库,但是有智鼎在线2019年9、10、11三个月的试题,有十七套以上题目,普通的网申行测题足以对付,可以在做题时自己总结一些规律,都不是很难

Visual Assist X 破解补丁

vs a's'sixt插件 支持vs2008-vs2019 亲测可以破解,希望可以帮助到大家

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

JavaWEB商城项目(包括数据库)

功能描述:包括用户的登录注册,以及个人资料的修改.商品的分类展示,详情,加入购物车,生成订单,到银行支付等!另外还有收货地址的和我的收藏等常用操作.环境(JDK 1.7 ,mysql 5.5,Ecli

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

一学即懂的计算机视觉(第一季)

图像处理和计算机视觉的课程大家已经看过很多,但总有“听不透”,“用不了”的感觉。课程致力于创建人人都能听的懂的计算机视觉,通过生动、细腻的讲解配合实战演练,让学生真正学懂、用会。 【超实用课程内容】 课程内容分为三篇,包括视觉系统构成,图像处理基础,特征提取与描述,运动跟踪,位姿估计,三维重构等内容。课程理论与实战结合,注重教学内容的可视化和工程实践,为人工智能视觉研发及算法工程师等相关高薪职位就业打下坚实基础。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/26281 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,但是大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 下载方式:电脑登录https://edu.csdn.net/course/detail/26281,点击右下方课程资料、代码、课件等打包下载

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

快速入门Android开发 视频 教程 android studio

这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

Qt5 局域网通信软件(模仿QQ)

采用Qt5进行开发的局域网通信客户端+Server,界面模仿QQ的界面,聊天界面采用QWidget绘制的气泡!

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

ANSI-VITA-46.0-2007(中文翻译版)_V1.0.pdf

ANSI-VITA 46.0 2007老版本的的英文版本的中文翻译版本,含目录,通过谷歌翻译进行文字翻译,翻译的不是很专业,对初学者理解VPX接口及协议有一定的帮助,后续会对翻译进行改进。

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

MySQL数据库从入门到实战应用

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:&nbsp; 一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。 &nbsp;

相关热词 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行 c# 循环给数组插入数据 c# 多线程死锁的例子 c# 钉钉读取员工排班 c# label 不显示 c#裁剪影像 c#工作进程更新ui
立即提问