//以下是初始化栈的程序,但是有一个缺点,就是不能随机输入元素,必须要把栈填
//满才能结束,请教 能不能设计一个算法,或设一个标记来退出输入循环,从而达到
//随机输入N个元素
#include<stdio.h>
#include<malloc.h>

#define STACK_INIT_SIZE 100

typedef struct{
        int *top;
        int *base;
        int stacksize;
        }SqStack; 

void initstack(SqStack& S);
void check(SqStack S); 

int main() 
{
   SqStack S;
   printf("输入要创建的栈的元素:");
   initstack(S);
   printf("你创建的栈为:");
   check(S);
   system("pause");   
   
   return 0;
}
 
void initstack(SqStack& S)
//初始化栈
{
     int *p;
     int i;
     S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
     //在这里如果用STACK_INIT_SIZE会出错,如果改成具体数字则能成功运行
     if(!S.base) exit(0);
     S.top=S.base;
     S.stacksize=STACK_INIT_SIZE;
     p=S.base;
     for(i=0;i<S.stacksize;i++)
     { 
        scanf("%d",p++);
        S.top++;
        }        
     }
     
void check(SqStack S)
//用于回显栈中元素
{
     int *p;
     for(p=S.base;p<S.top;p++)
        printf("%d ",*p);        
        }