回 帖 发 新 帖 刷新版面

主题:用栈实现数组的逆序输出

那位编程高手帮帮忙,编写一个用栈实现数组的逆序输出呀,要是数组.谢谢各位啦

回复列表 (共17个回复)

沙发

栈也可以是虚拟的啊~
 你数组放在那,不就是一个栈吗?只不过数组的地址为栈底了。
  具体如下:
    input:a[N];
    K=1:N;
        output:a[N-K];
    end

我也是菜鸟,不知道这样可不可以。期待高手。

板凳

能不能讲详细一点,我刚刚才接触这个程序,所以对编写程序很多都不懂

3 楼

麻烦一点就是让数组先进栈在退栈!

4 楼

#include"stdio.h"
#include"stdlib.h"
#define OK  1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define M 10  /*M 可以自己调动*/
#define OVERFLOW -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
typedef int SElemType;
typedef int status;
typedef struct             /* 定义一个栈 */
    { 
      SElemType *base;
      SElemType *top;
      int stacksize;
    } Stack;
  
    
status InitStack(Stack *S)  /* 初始化栈 */
  { 
    (*S).base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
    
   if ((*S).base == NULL)
   { 
      printf(" out of memory ");
      exit(OVERFLOW);
       
   }
   
   (*S).top = (*S).base;
   (*S).stacksize = STACK_INIT_SIZE;
   
   return OK;
  
  }


 status PushStack(Stack *S,SElemType e)   /* 进栈操作 */
 { 
       if (S->top - S->base >= S->stacksize)
       {   
          S->base = (SElemType*)realloc( S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
          if (S->base==NULL)
          {  
             printf(" out of memory ");
             exit(OVERFLOW);
          }

          S->top = S->base + S->stacksize;
          S->stacksize += STACKINCREMENT;
       }
       
       *S->top++ = e;
       return OK;

 }


 status PopStack(Stack *S,SElemType *e)   /* 出栈操作 */
 {
       if (S->top == S->base)
          return ERROR;
     
       *e = *(--S->top);  /* 这里不能掉*  */
     
       return OK;
 }
 
 status EmptyStack(Stack S)  /* 判断栈是否为空 */
 {
        if (S.top == S.base)
            return TURE;
        return FALSE;

 }

 int main()

 {
     Stack S;
     int e,a[10],i;
     InitStack (&S);
     
     for (i=0;i<M;i++)  /* 数组末要输入一个0 结束符 */
       scanf("%d",&a[i]);
      
     printf("倒序之前的数组为:");
     for (i=0;i<M-1;i++)
        printf("%d ",a[i]);
        printf("\n");
     
     i=0;
     while (a[i]!=0)      /* 将数组中的元素压入栈中 */
     {  
       PushStack(&S,a[i]);
       i++;
     }
     
     printf("倒序之后的数组为:");
     while (!EmptyStack(S))  /*  倒序输出数组中的元素 */
     {   
         PopStack(&S,&e);
         printf("%d ",e);

     }
    
     printf("\n");
     
     system("pause");
     return 0;

 }

5 楼

不错。不错。
  向上楼学习!~
    有个地方不明白:system("pause");
    不知道中国台湾能不能解释下是什么意思啊。谢谢

6 楼


让系统停止一下 可以看到结果 如果不加  屏幕一闪  看不到结果

7 楼

中国台湾,妳能不能编写二叉排序树呀!先谢谢啦

8 楼

typedef int SElemType;
请问这句是什么意思啊?

9 楼

这题那么容易也要叫人写

10 楼

这么长的程序,看得我头晕呀

我来回复

您尚未登录,请登录后再回复。点此登录或注册