棧和佇列常見問題及其演算法和c 實現

2022-09-23 12:12:10 字數 1112 閱讀 7471

1.實現乙個棧,要求實現push,pop,min(返回最小值的操作)的時間複雜度為o(1)

演算法思想:需要設計乙個輔助棧,用來儲存當前棧中元素的最小值。額外需要注意push操作,第乙個元素不用比較,自動成為最小值入棧,其他元素每次都要和棧頂元素進行比較,小的入棧。 

#include

#include      //直接用系統中的棧,不需要自己實現

using namespace std;

template

class stack

else

else}}

void pop()

t retmin()

private:

stack _stack;

stack _minstack;

};void test()

int main()

2.元素出棧入棧順序的合法性檢查

演算法思想:用for迴圈將陣列1中的元素入棧,每入棧乙個與陣列2中當前元素進行進行比較,如果相同就出棧,陣列2中下乙個元素作為當前元素。如果迴圈結束,而棧中還有元素,就說明陣列2不是pop序列。

#include

#include

using namespace std;

bool invalidcheck(int* stack_in, int* stack_out, int len1, int len2)

int i = 0, j = 0;

for (i = 0, j = 0; i < len1; i++)

}if (s.size() > 0)

return false;

else

return true;

}int main()

;int stack_out = ;

int len1 = sizeof(stack_in) / sizeof(stack_in[0]);

int len2 = sizeof(stack_out) / sizeof(stack_out[0]);

bool ret = invalidcheck(stack_in, stack_out, len1, len2);

if (ret)

else

return 0;} 

資料結構 棧和佇列常見演算法問題

演算法和問題來自於試卷,輔導書,以及網路。資料結構 typedef struct sqstack 順序棧 typedef struct squeue 分析 略 bool func char s n if i k return0 else return1 分析 略 typedef struct lno...

棧和佇列演算法

1 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值 的時間 複雜度為o 1 方法1 使用乙個棧實現,交叉棧 pragma once include define max value 100 typedef struct minstackminstack 實現乙個棧,要求實現pu...

演算法 佇列和棧

雙端佇列的首部和尾部都可以亞壓入元素 public class statck stacktest array public static void stacktest int array else else data.push array i system.out.println 每一步棧的最小值 ...