スタックを考えてみましょう。スタックの最大値は100です。私はこのポップ機能していC.スタックスタックC.ポップアリトップ結果の保存
#define MAX 100
typedef struct stack {
int size;
int values[MAX];
} STACK;
:として定義され、
int pop(STACK *s, int *x){
if (s->size == 0) return 1;
int *p = s->values + s->size--;
*x = *p;
return 0;
}
値を削除することになっている[MAX]最後の要素をXアドレスにその値を格納し、成功ならば0を返します。
その他の機能:
int top(STACK *s, int *x){
if (s->size == 0) return 1;
int *p = s->values + s->size;
*x = *p;
return 0;
} //like pop function, it should store top element at address x.
void initStack(STACK *s){
s->size = 0;
}
int push(STACK *s, int x){
if (s->size >= MAX) return 1;
int *p = (s->values);
*(p + s->size++) = x;
return 0;
}
これが私のメインです。
int main(){
struct stack s;
STACK *p = &s;
int i;
int x,y,z,w,t;
initStack(p);
for(i = 0; i < MAX; i++)
push(p,i);
int res = push(p,MAX);
for(i = 0; i < MAX; i++)
printf("%d|", p->values[i]);
printf("\nLast insertion: %d",res);
pop(p,&x);
pop(p,&y);
pop(p,&z);
pop(p,&w);
top(p,&t);
printf("\nThe elements %d|%d|%d|%d were removed. Current stack size: %d . Top element: %d.",x,y,z,w,p->size,t);
return 0;
}
結果(最後のprintf):何らかの理由で
The elements 1|99|98|97 were removed.Current stack size: 96 .Top element: 96.
、最初のポップ呼び出しが失敗し、だけでなく、取り除かれた要素のリストを非難するが、それだけで最初のポップ呼び出しに失敗しましたまた、最上位の要素の結果。理由についてのご提案は ですか?
何push' 'については? –
そして、これをしないでください: 'int * p = s-> values + s-> size - ' please。 –
スタックを完全に埋める場合にのみ問題が発生しますか? ( 'push 'と' initStack'も投稿してください) – molbdnilo