欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-10 23:33:31
...

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

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

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

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

相关练习题:表达式求值

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

#include <stdio.h>
#include <stack>
#include <string>
#include <string.h>
#include <iostream>
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)

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

相关标签: 学习日记