| 
 | 
 
 
发表于 2021-11-3 22:41:34
|
显示全部楼层
   本楼为最佳答案    
 
 
 - /*
 
 - #include "stdio.h"
 
 - #include "stdlib.h"
 
 - #include "string.h"
 
 - */
 
 - #include <stdio.h>
 
 - #include <stdlib.h>
 
 - #include <string.h>
 
  
- #define true 1
 
 - #define false 0
 
 - #define Status int
 
  
- typedef struct {
 
 -     int *base;
 
 -     int *top;
 
 -     int stacksize;
 
 - } SqStack;
 
  
- /*
 
 - Status SS_Init(SqStack *S, int max);
 
 - Status SS_IsFull(SqStack S);
 
 - Status SS_IsEmpty(SqStack S);
 
 - void SS_Length(SqStack S);
 
 - Status SS_push(SqStack *S, int e);
 
 - Status SS_pop(SqStack *S, int *e);
 
 - */
 
  
- Status SS_Init(SqStack *S, int max) {
 
 -     //S->base = (int *)malloc(max * sizeof(int));
 
 -     S->base = malloc(max * sizeof(int));
 
 -     //if(!(S->base)) exit(1);
 
 -     if(!S->base) exit(1);
 
 -     S->top = S->base;
 
 -     S->stacksize = max;
 
 -     return true;
 
 - }
 
  
- // 为什么不写释放函数?
 
 - void stack_deinit(SqStack *s) {
 
 -     free(s->base);
 
 - }
 
  
- //Status SS_IsFull(SqStack S) {
 
 - Status SS_IsFull(SqStack *S) {
 
 -     //if(S.top - S.base == S.stacksize) {
 
 -     if(S->top - S->base == S->stacksize) {
 
 -         return true;
 
 -     } else {
 
 -         return false;
 
 -     }
 
 - }
 
  
- //Status SS_IsEmpty(SqStack S) {
 
 - Status SS_IsEmpty(SqStack *S) {
 
 -     //if(S.top == S.base) {
 
 -     if(S->top == S->base) {
 
 -         return true;
 
 -     } else {
 
 -         return false;
 
 -     }
 
 - }
 
  
- //void SS_Length(SqStack S) { printf("Stack length:%d\n", S.top - S.base); }
 
 - //void SS_Length(SqStack S) { printf("Stack length:%ld\n", S.top - S.base); }
 
 - void SS_Length(SqStack *S) { printf("Stack length:%ld\n", S->top - S->base); }
 
  
- Status SS_push(SqStack *S, int e) {
 
 -     /*
 
 -     int m;
 
 -     m = SS_IsFull(*S);
 
 -     */
 
 -     //int m = SS_IsFull(*S);
 
 -     int m = SS_IsFull(S);
 
 -     //if(!m) {
 
 -     if(m) {
 
 -         return false;
 
 -     } else {
 
 -         *(S->top) = e;
 
 -         S->top++;
 
 -         return true;
 
 -     }
 
 - }
 
  
- Status SS_pop(SqStack *S, int *e) {
 
 -     /*
 
 -     int m;
 
 -     m = SS_IsEmpty(*S);
 
 -     */
 
 -     //int m = SS_IsEmpty(*S);
 
 -     int m = SS_IsEmpty(S);
 
 -     //if(!m) {
 
 -     if(m) {
 
 -         return false;
 
 -     } else {
 
 -         (S->top)--;
 
 -         *e = *(S->top);
 
 -     }
 
 -     return true;
 
 - }
 
  
- //Status SS_print(SqStack S) {
 
 - Status SS_print(SqStack *S) {
 
 -     /*
 
 -     int m;
 
 -     m = SS_IsEmpty(S);
 
 -     */
 
 -     int m = SS_IsEmpty(S);
 
 -     //if(!m) {
 
 -     if(m) {
 
 -         printf("stack data: Empty!\n");
 
 -         return false;
 
 -     } else {
 
 -         //printf("stack data (from bottom to top):");
 
 -         printf("stack data (from top to bottom): ");
 
 -         //while(S.top != S.base) {
 
 -         while(S->top != S->base) {
 
 -             S->top--;
 
 -             //printf("%d ", *(S->top));
 
 -             printf("%d ", *S->top);
 
 -         }
 
 -         //printf("%d", S.base);
 
 -         //printf("%d", *S.base);
 
 -         //printf("%d", *S->base);
 
 -     }
 
  
-     printf("\n");
 
  
-     return true;
 
 - }
 
  
- int main() {
 
 -     SqStack S;
 
 -     //int max, b, i = 0;
 
 -     //int b, i = 0;
 
 -     int b;
 
 -     //char ch;
 
 -     char a[10];
 
 -     /*
 
 -     scanf("%d", &max);
 
 -     SS_Init(&S, max);
 
 -     */
 
 -     int temp;
 
 -     scanf("%d", &temp);
 
 -     SS_Init(&S, 1024);
 
 -     while(1) {
 
 -         scanf("%s", a);
 
 -         /*
 
 -         while((ch = getchar()) != ' ') {
 
 -             a[i] = ch;
 
 -             i++;
 
 -         }
 
 -         */
 
 -         if(strcmp(a, "push") == 0) {
 
 -             scanf("%d", &b);
 
 -             SS_push(&S, b);
 
 -         }
 
 -         if(strcmp(a, "pop") == 0) {
 
 -             //SS_push(&S, b);
 
 -             SS_pop(&S, &b);
 
 -         }
 
 -         if(strcmp(a, "end") == 0) {
 
 -             break;
 
 -         }
 
 -     }
 
 -     //SS_Length(S);
 
 -     SS_Length(&S);
 
 -     //SS_print(S);
 
 -     SS_print(&S);
 
 -     stack_deinit(&S);
 
 -     return 0;
 
 - }
 
 
  复制代码 |   
 
 
 
 |