【鏈表】悲劇文本

問題描述:
你有一個破損的鍵盤。鍵盤上所有的鍵都可以正常工作,但有時候Home鍵或者End鍵會自動按下。你並不知道鍵盤存在這一問題,而是專心打稿子,甚至連顯示器都沒打開。當你打開顯示器後,展現在你面前的是一段悲劇文本。你的任務是在打開顯示器之前計算出這段悲劇文本。
輸入包含多組數據。每組數據佔一行,包含不超過100000個字母、下劃線、字符“【”或者“】”。其中字符“【”表示Home鍵,“】”表示End鍵。輸入結束標誌爲文件結束符(EOF)。輸入文件不超過5MB。對於每組數據,輸出一行,即屏幕上的悲劇文本。
樣例輸入:
This_is_a_[Beiju]_text
樣例輸出:
BeijuThis_is_a_text

一、閱讀題目
1 已知輸入的字符串;未知輸出的字符串的順序;
2 條件:遇到“【”跳到最前邊,遇到“】”,跳到最後面;
二、擬定方案
1 頭結點爲空,開始時指向第一個節點;int cur, 0, last, char a[100], int next[100]; int n;
2 使用隊列模擬鏈表進行表示;

三、code

#include<stdio.h>

const MAXN = 10000 + 5;

int main()
{
    int cur, last, n, i;
    char s[MAXN];
    int next[MAXN];
    char ch;
    while(scanf("%s", s + 1) == 1)
    {
        n = strlen(s + 1);
        last = cur = 0;
        next[0] = 0;
        for(i = 1; i <= n; i++)
        {
            ch = s[i];
            if(ch == '[')
            {
                cur = 0;
            }else if(ch == ']')
            {
                cur = last;
            }else
            {
                next[i] = next[cur];
                next[cur] = i;
                if(cur == last)
                {
                    last = i;
                }
                cur = i;
            }

        }
        for(i = next[0]; i != 0; i = next[i])
        {
            printf("%c\n", s[i]);
        }
    }
}

四、回顧
1 cur是當前值,i爲下一個即將添加的值;
2 節點插入爲尾節點插入:方式是插入最後的節點,然後更新current和last的值;

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