問題描述
一天,小 l 突然對列車的進出站問題產生了興趣,如下圖所示:
列車只能從 a 進站,或從 b 出站。
列車從 a 進站,進站順序為 1, 2, 3, 4, 5
列車從 b 出站,出站順序為 5, 4, 3, 2, 1
現在,小 l 想知道:
列車從 a 進站,進站順序為 1~n
列車從 b 出站,給定出站的順序,判斷是否可能按照這個順序出站
★資料輸入
第一行乙個正整數 n(1<=n<=1000)。
第二行包含 n 個正整數,為 1~n 的某個排列
★資料輸出
若能夠按照給定的順序出站,輸出」yes」 (沒有引號)
否則,輸出」 no」 (沒有引號)
解題思路
思路一:判斷出棧序列中,比本數小的數是否按降序排列
時間複雜度o(n^2),本題1<=n<=1000,可用
易寫,不易錯,效率低
思路二:使用棧模擬進棧出棧
時間複雜度o(n)
易寫錯,效率高
code
solve 1
1 #include 2 #include 34bool popable(int *p,int
len)519
}20}21
return
true;22
}2324int
main()
25
solve 2
1 #include 2 #include 34#define error 0x7fffffff
5#define type int67
class
mystack//std::stack
811 ~mystack()
12bool empty()
13 type top() //
每次用top()前應先呼叫empty(),判斷是否為空
14void pop() //
本題掉pop()前都有調top()與empty(),可保證不為空
15void push(type num) //
構造傳入maxsize,保證不爆棧
16private:17
intmaxsize;
18int
size;
19 type *arr;
20};
2122
2324
intmain()
2542
else
if(!s.empty() && s.top()==p[j])
4347
else
4852}53
54while(!s.empty())
5561
else
6267
}68 printf("
yes\n");
6970
free
(p);
71return0;
72 }
資料結構 資料結構緒論
資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...
資料結構 資料結構演算法
分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...
資料結構 01 資料與資料結構
1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...