設順序棧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...