前提・実現したいこと
stackが空ならpush
stackの頂上よりも大きいときはpush
stackの頂上にある整数よりも大きい、または空状態になるまでpopして、そのあとにpush
していく。
プログラム引数で読み込む
発生している問題・エラーメッセージ
実行しても、stackには一個の値しか表示されていない。
セグメントエラーが起きる。
#include<stdio.h> #include<stdlib.h> #define STACK_SIZE 10 int gStack[STACK_SIZE]; int gSNum =0; typedef double STACK_TYPE; void push(int x){ gStack[gSNum] = x; gSNum++; } int pop(void){ int x=gStack[gSNum - 1]; gSNum--; return x; } int isStackEmpty(void){ return gSNum == 0; } STACK_TYPE peek(void){ return gStack[--gSNum]; } void printStack(void){ int i; printf("STACK[ "); for(i=0;i<gSNum;i++){ printf("%d ",gStack[i]); } printf("]\n"); } int main(int argc,char*argv[]){ int i,x; for(i=1;i<argc;i++){ x = atoi(argv[i]); if(isStackEmpty()){ push(x); }else if(x>peek()){ push(x); }else{ while(x>peek() || !isStackEmpty()){ pop(); } push(x); } printStack(); } return 0; }
試したこと
実行結果を表示します
2 4 6 8 3の時、
STACK[ 2 ]
STACK[ 4 ]
STACK[ 6 ]
STACK[ 8 ]
セグメントエラー
補足情報(FW/ツールのバージョンなど)
正しい結果は以下のようになります。
STACK[ 2 ]
STACK[ 2 4 ]
STACK[ 2 4 6 ]
STACK[ 2 4 6 8 ]
STACK[ 2 3 ]