【学习日记01】栈+计网传输层

2020.6.18
一、王道机试指南第三章-数据结构
1、栈:

  • 简单调用:使用C++
#include //head file
stack<int> S;//defien
S.empty();//empty?True:False;
S.push(i);
S.pop();
int i=S.top();
一个栈被多次调用时,一定要记得清空!!!
  • 经典使用:
    • 括号匹配:

      思路:
      · 顺序遍历字符串,遇到左括号就压栈,遇到右括号就弹栈匹配(栈为空就意味匹配失败);
      · 遍历完后,栈中元素个数即为未匹配成功的左括号个数;
      · 若想标记哪些括号未匹配,可以将字符串内字符对应下标压栈;

    • 表达式计算(典型思路):
      【学习日记01】栈+计网传输层_第1张图片

相关练习题:表达式求值

借鉴别人的思路:
一个栈就可以。遇到and就弹出第一个和下一个判断,下一个就不放入栈里了。
然后遍历栈 只要有true就输出true(因为这时候只有or了)

#include 
#include 
#include 
#include 
#include 
using namespace std;

int main(){
    stack<string> data;
    char in[10];
    string next;
    int flag=0,ind=0,a,b;
    while(scanf("%s",in)!=EOF){
        ind++;
        if((strcmp(in,"and")==0||strcmp(in,"or")==0)&&ind%2==1){
            flag=1;break;
        }//处理错误情况
        if((strcmp(in,"true")==0||strcmp(in,"false")==0)&&ind%2==0){
            flag=1;break;
        }//处理错误情况
        if(strcmp(in,"true")==0)
            data.push("true");//值压栈
        else if(strcmp(in,"false")==0)
            data.push("false");//值压栈
        else if(strcmp(in,"or")==0)
            data.push("or");//or压栈
        else{//当遇到and时
            scanf("%s",in);
            ind++;//取下一个输入
            if((strcmp(in,"and")==0||strcmp(in,"or")==0)&&ind%2==1){
                flag=1;break;
            }//出错情况判断
            next=data.top();data.pop();//取栈顶,出栈
            //开始计算
            if(strcmp(in,"true")==0)
                b=1;
            else
                b=0;
            if(next=="true")
                a=1;
            else
                a=0;
            if(a&&b)//结果压栈
                data.push("true");
            else
                data.push("false");
        }
    }
    if(flag){
        printf("error");
        return 0;
    }
    else{
        if(data.top()=="or"||data.top()=="and"){//以运算符结尾的错误情形
            printf("error");
            return 0;
        }
        while(!data.empty()){//遍历栈中元素,是否有true
            if(data.top()=="true"){
                printf("true");
                return 0;
            }
            data.pop();
        }
    }
    printf("false");
    return 0;
}

二、计网传输层

  1. udp传输协议(简单的差错控制,即校验和)
  2. tcp传输协议:
    1.0版:基于可靠信道,下面的版本基于不可靠信道
    2.0版:引入:ack&nak + 重传(ARQ协议)(停止-等待协议)
    2.1版:引入:序列号seq(防止ack/nak被破坏)
    2.2版:改进:去掉nak,在ack中加入序列号
    2.3版:引入:定时器
    现:引入流水线机制,即滑动窗口协议(回退N帧/GBN、选择重传/SR)

进度有点慢,感觉有点累,但,欲戴皇冠,必承其重,既然想去名校,就要努力!

你可能感兴趣的:(学习日记)