1 / 27

iStack

iStack. 屬性 -- int _top; vector<int> _stack; 方法 -- bool pop(int &top_value) bool push(int value) bool full() bool empty() void display() int size(). Stack( 堆疊 ). 2. 4. 6. 放進堆疊. 放進堆疊. 放進堆疊. 2. 6. 4. 4. 2. 2. 後進先出方式. Stack( 堆疊 ). 6. 4. 2. 移出堆疊. 移出堆疊. 移出堆疊. 2. 6. 4.

kat
Download Presentation

iStack

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. iStack • 屬性-- • int _top; • vector<int> _stack; • 方法-- • bool pop(int &top_value) • bool push(int value) • bool full() • bool empty() • void display() • int size()

  2. Stack(堆疊) 2 4 6 放進堆疊 放進堆疊 放進堆疊 2 6 4 4 2 2

  3. 後進先出方式 Stack(堆疊) 6 4 2 移出堆疊 移出堆疊 移出堆疊 2 6 4 4 2 2

  4. iStack建構子 • iStack(int capacity):_stack(capacity),_top(0){} • _stack(capacity)的意思是: vector<int> _stack(capacity); 宣告一個容量為capacity的向量 • capacity:傳入堆疊可以容入的空間 • 初始值設定_top=0 • 考題main()中設定的初始值為: • 第一題:iStack stack(32) 可以存入32個值 • 第二題:iStack stack(10) 可以存入10個值

  5. bool full() • inline bool full() • { return _top<_stack.size()-1?false:true; • } • _stack.size() size()是向量物件的一個方法 ,回傳向量的空間大小 所以第一題_stack.size()=32, 而當_top=31,則堆疊空間滿了 full()函式的意義-->檢查堆疊空間是不是滿了

  6. bool empty() • inline bool empty() • { • return _top?false:true; • } • 當_top=0時,堆疊裡則是空的 empty()函式的意義-->檢查堆疊空間是不是空的

  7. int size() • inline int size() • { • return _top; _top記錄堆疊第一個的為址值 • }

  8. bool push(int value) • bool push(int value) { • cout<<"iStack::push(" <<value<< ")\n"; • if(full()) return false; 堆疊滿了,則無法放入。 • _stack[_top++]=value; • return true; } • push函式意義將value放入堆疊中

  9. push(int value) value 放進堆疊 _top value 以第一題為例 共有32個空間 _top …

  10. bool pop(int &top_value) • bool pop(int &top_value){ • if(empty()) return false;堆疊是空的,沒有值可以移出 • top_value=_stack[--_top]; • cout<<"iStack::pop():"<<top_value<<endl; • return true; } • pop()函式意義將堆疊的值移出

  11. pop(int &top_value) value 感覺value被移出堆疊外 _top value top_value 以第一題為例 共有32個空間 _top …

  12. void display() • void display() { • if(!size()){cout<<"(0)\n";return;} • cout<<"("<<size()<<")(bot:"; • for(int ix=0;ix<_top;++ix) • cout<<_stack[ix]<<" "; • cout<<":top)\n";} • display() 印出堆疊裡的所有值

  13. 第一題 • if(k%2==0) stack.push(z); • if(k%3==0) stack.display(); • if(k%5==0) {int dummy;stack.pop(dummy);} • k是2的倍數:將z值存入堆疊 • k是3的倍數:將堆疊內存的值印出 • k是5的倍數:將堆疊的值移出 • Note!!:push(int value) 存入值為整數攸

  14. 初始值:i=0; j=1; k=i+j; z=k*1.1迴圈內的值:i=j; j=k; k=i+j; z=k*1.1 • step1:i=0, j=1, k=0+1=1, z=1*1.1=1.1 • step2:i=1, j=1, k=1+1=2, z=2*1.1=2.2 • step3:i=1, j=2, k=1+2=3, z=3*1.1=3.3 • step4:i=2, j=3, k=2+3=5, z=5*1.1=5.5 • step5:i=3, j=5, k=3+5=8, z=8*1.1=8.8 • step6:i=5, j=8, k=5+8=13,z=13*1.1=14.3 • step7:i=8,k=13,k=8+13=21,z=21*1.1=23.1 • step8:i=13,j=21, k=13+21=34, z=34*1.1=37.4 • step9:i=21, j=34, k=21+34=55, z=55*1.1=60.5 • step10:i=34, j=55, k=34+55=89, z=89*1.1=97.9 • step11:i=55, j=89, k=55+89=144, z=144*1.1=158.4

  15. 初始值:i=0; j=1; k=i+j; z=k*1.1迴圈內的值:i=j; j=k; k=i+j; z=k*1.1 • k=0+1=1, z=1*1.1=1.1 • k=1+1=2, z=2*1.1=2.2 將2存入堆疊 • k=1+2=3, z=3*1.1=3.3 將堆疊內存的值印出 • k=2+3=5, z=5*1.1=5.5 將堆疊的值2移出 • k=3+5=8, z=8*1.1=8.8 將8存入堆疊 • k=5+8=13,z=13*1.1=14.3 • k=8+13=21,z=21*1.1=23.1 將堆疊內存的值印出 • k=13+21=34, z=34*1.1=37.4 將37存入堆疊 • k=21+34=55, z=55*1.1=60.5 將堆疊的值37移出 • k=34+55=89, z=89*1.1=97.9 • k=55+89=144, z=144*1.1=158.4

  16. 第一題答案 • iStack::push(2) • (1)(bot:2: top) • iStack::pop():2 • iStack::push(8) • (1)(bot:8: top) • iStack::push(37) • iStack:pop():37 • (1)(bot:8 :top)

  17. 第二題 • if(k%3==0) stack.push(z); • if(k%2==0) stack.display(); • if(k%5==0) {int dummy;stack.pop(dummy);} • k是3的倍數:將z值存入堆疊 • k是2的倍數:將堆疊內存的值印出 • k是5的倍數:將堆疊的值移出 • Note!!:push(int value) 存入值為整數攸

  18. 初始值:i=0; j=1; k=i+j; z=k*1.1迴圈內的值:i=j; j=k; k=i+j; z=k*1.1 • k=0+1=1, z=1*1.1=1.1 • k=1+1=2, z=2*1.1=2.2 將堆疊內存的值印出 • k=1+2=3, z=3*1.1=3.3 將3存入堆疊 • k=2+3=5, z=5*1.1=5.5 將堆疊的值3移出 • k=3+5=8, z=8*1.1=8.8 將堆疊內存的值印出 • k=5+8=13,z=13*1.1=14.3 • k=8+13=21,z=21*1.1=23.1 將23存入堆疊 • k=13+21=34, z=34*1.1=37.4 將堆疊內存的值印出 • k=21+34=55, z=55*1.1=60.5 將堆疊的值23移出 • k=34+55=89, z=89*1.1=97.9 • k=55+89=144, z=144*1.1=158.4

  19. 第二題答案 • (0) • iStack:push(23) • iStack:pop():3 • (0) • iStack:push(23) • (1)(bot:23:top) • iStack::pop()23 • (0)

  20. 第三題

  21. i++ V.S ++i Int i=0; cout<<“ i = “<<i++<<endl; 結果: i = 0; Int i=0; cout<<“ i = “<<++i<<endl; 結果: i = 1; 先作cout動作 再做i=i+1的動作 先做i=i+1的動作 再做cout動作

  22. int main() • { • int ia[10]={0,2,4,6,8,10,12,14,16,18}; • vector<int> ivec(10); • int i_vec=0,i_ia=9; • while(i_ia>=0 && i_ia<10) ivec[++i_vec]=ia[i_ia--]; • for(int i=0;i<10;i++) • cout<<"(1) ivec["<<i<<"]="<<ivec[i]<<"\n"; • cout<<"\n"; • i_vec=0;i_ia=9; • while(i_ia>=1 && i_ia<10) ivec[i_vec++]+=ia[--i_ia]; • for(int i=0;i<10;i++) • cout<<"(2) ivec["<<i<<"]="<<ivec[i]<<"\n"; • return 0; • }

  23. int ia[10]={0,2,4,6,8,10,12,14,16,18}; • int i_vec=0,i_ia=9; • while(i_ia>=0 && i_ia<10) • ivec[++i_vec]=ia[i_ia--]; ivec[1]=ia[9]18 先執行i_ivec=i_ivec+1 i_ivec=0+1 ivec[2]=ia[8]16 ivec[3]=ia[7]14 ivec[4]=ia[6]12

  24. ivec[1]=ia[9]18 ivec[6]=ia[4]8 ivec[2]=ia[8]16 ivec[7]=ia[3]6 ivec[3]=ia[7]14 ivec[8]=ia[2]4 ivec[4]=ia[6]12 ivec[9]=ia[1]2 ivec[5]=ia[5]10

  25. int ia[10]={0,2,4,6,8,10,12,14,16,18} ivec[10]={0,18,16,14,12,10,8,6,4,2} • i_vec=0;i_ia=9; • while(i_ia>=1 && i_ia<10) ivec[i_vec++]+=ia[--i_ia]; ivec[0]=ivec[0]+ia[8] 先執行 i_ia=i_ia-1 i_ivec=9-1 Ivec[0]=0+16

  26. int ia[10]={0,2,4,6,8,10,12,14,16,18} ivec[10]={0,18,16,14,12,10,8,6,4,2} ivec[0]=ivec[0]+ia[8]0+16=16 ivec[1]=ivec[1]+ia[7]18+14=32 ivec[2]=ivec[2]+ia[6]16+12=28 ivec[3]=ivec[3]+ia[5]14+10=24 ivec[4]=ivec[4]+ia[4]12+8=20

  27. int ia[10]={0,2,4,6,8,10,12,14,16,18} ivec[10]={0,18,16,14,12,10,8,6,4,2} ivec[5]=ivec[5]+ia[3]10+6=16 ivec[6]=ivec[6]+ia[2]8+4=12 ivec[7]=ivec[7]+ia[1]6+2=8 ivec[8]=ivec[8]+ia[0]4+0=4 ivec[9]2

More Related