Рассмотрите стек, в котором не более 100 int. Определяется как:Stack in C. Сохранение результатов pop ant top
#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] последний элемент, сохранить это значение в точке х адресов, а затем возвращает 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 -' пожалуйста. –
Возникает ли проблема только при полном заполнении стека? (Пожалуйста, отправьте 'push' и' initStack'.) – molbdnilo