【學習日記01】棧+計網傳輸層

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();
一個棧被多次調用時,一定要記得清空!!!
  • 經典使用:
    • 括號匹配:

      思路:
      · 順序遍歷字符串,遇到左括號就壓棧,遇到右括號就彈棧匹配(棧爲空就意味匹配失敗);
      · 遍歷完後,棧中元素個數即爲未匹配成功的左括號個數;
      · 若想標記哪些括號未匹配,可以將字符串內字符對應下標壓棧;

    • 表達式計算(典型思路):
      在這裏插入圖片描述

相關練習題:表達式求值

借鑑別人的思路:
一個棧就可以。遇到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)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章