1. 程式人生 > >博客作業03--棧和隊列

博客作業03--棧和隊列

排名 fifo 創建 bubuko lse 程序 判斷 分享圖片 思路

1.學習總結

技術分享圖片

棧只能在同一端進行入棧出棧操作(FILO),而隊列是在一端入隊,在另一端出隊(FIFO)。

查找了一些算法,灰色部分是目前還未接觸過的算法

技術分享圖片

2.PTA實驗作業

2.1.1 題目1:字符串是否對稱

2.1.2 設計思路

    定義變量X,數組a[]存放數據;
    定義變量N=0,i控制循環,記錄元素個數;
    定義棧S;
    
    while 輸入的X不為換行符
        令a[N]等於X,並且N自增一;
    
    以N為棧的最大容納量創建棧S;

    for i=0 to N
        a[i]進入棧S;
    end for

    for i=0 to a[i]!=‘\0‘
        X=S出棧的數值;
        if a[i]與X不相等
        {    輸出 “no”;
            返回 0;
        }
    end for

    輸出 “yes”;
    返回 0;

2.1.3 代碼截圖

技術分享圖片

2.1.4 PTA提交列表說明

技術分享圖片

技術分享圖片

一開始因為C/C++部分操作弄混了,修改後第二個測試點對了,但是第一個一直不對,以為是數組設置的不夠大,但是在我增大到讓程序運行超時時仍然不正確,也讓其他同學替我看了,找不到到底錯在哪,但題目給的樣例能正確輸出。

2.2.1 題目2:符號配對

2.2.2 設計思路

    定義棧S;
    定義自變量flag=1作為正誤判斷標誌,i控制循環,len記錄字符串長度;
    定義變量s[100000],X,e記錄數據;
    
    初始化棧S;
    while(1)
    {
        輸入字符串s;
        if s[0]為‘.‘並且s[1]為0 
            退出循環;
        給len賦值s的長度;
        棧S的大小Size加上len;
        for i=0 to s[i]!=‘\0‘
            if s[i]為‘/‘ 或‘[‘ 或‘{‘
                s[i]入棧;
            else if s[i]為‘/‘並且s[i+1]為‘*‘ 且 i+1<len
            {
                }
    }

2.2.3 代碼截圖

技術分享圖片

技術分享圖片

技術分享圖片

2.2.4 PTA提交列表說明

技術分享圖片

經過漫長的編寫,測試後發現題目給的sample3輸出結果不對,調試後找到了問題:我采取的是在一開始先錄入所有的數據,直到收到‘.‘和‘\n‘,但是第三個樣例中這樣輸入會導致後面的數據不能進入數組,造成結果錯誤,所以我改變了數據輸入的方式,也的確對了,但是第六個測試點“左右符號個數相同,達到最大值,但不匹配”不明白是什麽意思,也沒辦法找數據測試。

2.3.1 題目3:銀行業務隊列簡單模擬

2.3.2 設計思路

    定義變量N記錄總人數,n為顧客編號;
    定義變量i控制循環,na,nb為格子隊列的元素數,e記錄出隊元素,數組a[1000]記錄完成業務的顧客編號;
    定義並初始化隊列QA,QB;
    輸入N;
    if N>0
        循環N次,按奇偶將顧客編號放入不同的隊列中;
        i=0;flag=1;
        循環N次
            if flag==1且QA不為空
                QA連續兩次出隊列,並將編號記錄在數組a中;
                if QB不為空 flag=0;
            else
                QB出隊一次,記錄出隊的編號;
                if QA不為空 flag=1;
        for i=0 to N-1
            輸出a[i]+" "
        輸出a[i]

2.3.3 代碼截圖

技術分享圖片

技術分享圖片

2.3.4 PTA提交列表說明

技術分享圖片

  • 第一次提交時只有第一個測試點(題目給的樣例)正確,經過調試後對代碼進行了修改
    修改前:
    技術分享圖片

修改後:
技術分享圖片

  • 1.無論是na還是nb,當其為0時皆表示隊列中沒有元素存在,邊界情況應該註意這一點;

  • 2.建立在上面那一點錯誤的情況下的錯誤。考慮到flag的初始值為1,而變為0是在flag==1的前提下,若是將QB出隊的條件限制太多,反而不能夠成功讓QB隊列中的元素出隊。

3.截圖本周題目集的PTA最後排名

3.1棧的PTA排名

技術分享圖片

3.2隊列的PTA排名

技術分享圖片

總分:128分

4. 閱讀代碼

將十進制數轉為任意進制的數

技術分享圖片

原地址:{https://blog.csdn.net/qianqin_2014/article/details/51031090}

該段代碼可將輸入的十進制數轉化為自定義的進制數

優點:以前做進制轉化可能還要考慮輸出數的順序、考慮放入數組的順序,但是使用棧,直接將轉化後的數逐個進棧再全部出棧,不必考慮順序的問題。一個簡單的代碼體現了棧的特點。

5. 代碼Git提交記錄截圖

技術分享圖片

技術分享圖片

emmm...下次應該一次提交一個代碼的

博客作業03--棧和隊列