演算法設計 02

2021-10-08 01:42:33 字數 2185 閱讀 7060

設順序棧s中有2n個元素,從棧頂到棧底的元素依次為a2n,a2n-1,…,a2,a1,要求通過乙個迴圈佇列重新排列棧中元素,使得從棧頂到棧底的元素依次為a2n,a2n-2,…,a2,a2n-1,a2n-3,…,a1,請設計演算法實現該操作,要求空間複雜度和時間複雜度均為o(n).

ps:作業記錄

using

namespace std;

#include

#include

#define stack_size 100

#define queue_size 100

#define stack_increment 10

typedef

struct stack //棧的結構體定義

stack;

typedef

struct queue //迴圈佇列結構體定義

queue;

//順序棧函式定義

stack creat_stack

(int a)

cout <<

"順序棧建立成功!"

<< endl;

return st;

}//銷毀棧

void

destroy_stack

(stack &l)

//增加空間

void

increment_stack

(stack &st)

st.s_data = newstack;

delete

st.s_data;

st.stacksize +

= stack_increment;

}//入棧

void

push_stack

(stack &st,

int e)

//出棧

intpop_stack

(stack &st,

int e)

//列印棧,僅用於**結果

void

print_stack

(stack &st)

cout << endl;

}//迴圈佇列函式定義

void

creat_queue

(queue &queue)

//銷毀佇列

void

destroy_sqqueue

(queue &queue)

//入隊

void

en_queue

(queue &queue,

int e)

//出隊

intde_queue

(queue &queue,

int e)

//列印佇列,僅用於**結果

void

print_queue

(queue &queue)

cout << endl;

}//測試

void

test01()

for(

int i =

0; i < n; i++

)for

(int i =

0; i < n /

2; i++

)push_stack

(s,de_queue

(q, e));

//迴圈佇列中的奇數結點,依次入棧,此時所有元素皆在順序棧中

for(

int i =

0; i < n; i++

)en_queue

(q,pop_stack

(s, e));

//將順序棧中的元素依次出棧併入隊,此時所有元素皆在迴圈佇列中

for(

int i =

0; i < n; i++

)push_stack

(s,de_queue

(q, e));

//將迴圈佇列中的元素依次再次入隊,此時順序棧中的元素排列為題目要求

cout <<

"\n更改後的:"

<< endl;

print_stack

(s);

//列印

}int

main()

執行結果:

演算法 排序 02

從序列中選擇乙個軸點元素 pivot 假設每次選擇 0 位置的元素為軸點元素 利用 pivot 將序列分割成 2 個子序列 1.將小於 pivot 的元素放在pivot前面 左側 2.將大於 pivot 的元素放在pivot後面 右側 3.等於pivot的元素放哪邊都可以 對子序列進行上述操作,直到...

演算法 演算法學習02

動態規劃 分四步,子問題結構,狀態,狀態轉移方程,邊界收尾。重點在對於子問題的定義,以及狀態的轉移。動規的題難有定式,日常積累些典型例題且學會解決問題的思考方式就好。窮舉就是簡單粗暴的乙個個試。有兩個優化的點 啟發,例如每乙個嘗試都有響應概率,先可概率大的來。剪枝,根據某些條件判斷出必不可能的點,從...

《GeekBand》C 設計模式02

工廠方法 簡單工廠 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method是得乙個類的例項化延遲 目的 解耦,手段 虛函式 到子類。設計模式 gof exp 實現乙個多型別的分割器 抽象類 class isplitter 工廠基類 class splitte cto...