棧操作包括入棧,出棧,清空棧,銷燬棧等
#include<malloc.h> #include<string.h> #include<stdio.h> #define OVERFLOW -1 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int SElemType; typedef int Status; struct SqStack { SElemType *base; SElemType *top; int stacksize; }; Status InitStack(SqStack &S); Status DestoryStack(SqStack &S); Status ClearStack(SqStack &S); Status StackEmpty(SqStack S); int StackLength(SqStack S); Status GetTop(SqStack S, SElemType &e); Status Push(SqStack &S, SElemType e); Status Pop(SqStack &S, SElemType &e); Status StackTraverse(SqStack S, Status(*visit)()); Status InitStack(SqStack &S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) return OVERFLOW; S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } Status DestoryStack(SqStack &S) { free(S.base); S.base = NULL; S.top = NULL; S.stacksize = 0; return OK; } Status ClearStack(SqStack &S) { S.top = S.base; return OK; } Status StackEmpty(SqStack S) { if(S.top == S.base) return TRUE; else return FALSE; } int StackLength(SqStack S) { return S.top - S.base; } Status GetTop(SqStack S,SElemType &e) { if(S.top == S.base) return ERROR; e = *(S.top -1); return OK; } Status Push(SqStack &S, SElemType e) { if(S.top - S.base >= S.stacksize) { S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType)); if(!S.base) return OVERFLOW; S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; return OK; } Status Pop(SqStack &S, SElemType &e) { if(S.top == S.base) return ERROR; e = * --S.top; return OK; } Status StackTraverse(SqStack S, Status(* visit)(SElemType)) { while(S.top > S.base) visit(*S.base++); printf("\n"); return OK; } Status visit(SElemType e) { printf("%d ", e); return OK; } int main() { SElemType j; SqStack s; SElemType e; if(InitStack(s) == OK) for(j = 1; j <= 12; j++) { Push(s,j); } printf("棧中的元素依次為:"); StackTraverse(s,visit); Pop(s, e); printf("彈出的棧頂元素 e=%d\n", e); printf("棧空否:%d(1:是 0:否)\n", StackEmpty(s)); GetTop(s, e); printf("棧頂元素 e=%d 棧的長度為%d\n", e, StackLength(s)); ClearStack(s); printf("清棧後,棧空否:%d(1:空 0:否)\n",StackEmpty(s)); DestoryStack(s); printf("銷燬棧後,s.top = %u s.base= %u s.stacksize=%d\n",s.top,s.base,s.stacksize); return 0; }
執行結果如下:
相關推薦
棧操作包括入棧,出棧,清空棧,銷燬棧等
#include<malloc.h> #include<string.h> #include<stdio.h> #define OVERFLOW -1 #define STACK_INIT_SIZE 10 #define
劍指offer66題--Java實現,c++實現和python實現 21.棧的壓入、彈出序列
題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列
劍指Offer-棧的壓入、彈出序列
span tac 比較 最終 urn color public turn i++ 題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該
劍指offer: 棧的壓入和彈出序列
span boolean 結束 壓棧 輔助 == peek pty cnblogs 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序
劍指offer二十一之棧的壓入、彈出序列
img 完成 方法 [] 鏈接 span blog 分享 技術分享 一、題目 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列
劍指Offer——棧的壓入、彈出序列
是否 blog color size cnblogs sta 例如 pop clas 題目描述: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2
[劍指offer] 棧的壓入、彈出序列
pub lock 之前 pre div ret order 判斷 第一個 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧
棧的壓入、彈出序列
pop desc ++ vector 所有 top log subject tle 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,
ACM_棧的壓入、彈出序列
put 表示 整數 back 是不是 urn vector 位置 main 棧的壓入、彈出序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判
劍指offer 22. 棧的壓入、彈出序列
原題 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個
棧的壓入、彈出序列 java
棧的壓入、彈出序列 java 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能
【劍指Offer】21棧的壓入、彈出序列
題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列
[劍指offer] -- 22.棧的壓入、彈出序列
題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這
《劍指offer》系列 棧的壓入、彈出序列(Java)
連結 牛客:棧的壓入、彈出序列 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,
劍指offer學習筆記(Python)--棧的壓入、彈出序列
題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列
劍指Offer - 棧的壓入、彈出序列(Java實現)
題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(
劍指Offer-31棧的壓入、彈出序列
題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩
棧的壓入和彈出序列
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出
《劍指offer》-- 棧的壓入與彈出序列
一、棧的壓入與彈出序列: 1、題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順
劍指offer{面試題22:棧的壓入、彈出序列}
解題思路: 模擬堆疊操作的過程,將原數列依次壓棧,把棧頂元素與所給出棧佇列相比,如果相同則出棧,如果不同則繼續壓棧,直到原數列中所有數字壓棧完畢。最後,檢測棧中是否為空,若空,說明出棧佇列可由原數列進行棧操作得到。否則,說明出棧佇列不能由原數列進行棧操作得到。 import java.u