栈的动态顺序存储基本操作 一(初始化,进栈,访问栈顶元素,出栈)

#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 20
#define ElemType int
typedef struct SQtack{//动态顺序存储结构,存储空间随栈的大小变化
 ElemType *top,*bottom;//定义栈顶和栈底
 int stacksize;//栈的存储空间大小
}SQtack;


void Init_stack(SQtack &S){//初始化栈
 S.bottom=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
 if(!S.bottom) printf("未申请到存储空间\n");
 S.top=S.bottom; //初始化栈,使栈顶与栈底指向同一位置
 S.stacksize=MAXSIZE;
}


void Push_stack(SQtack &S){
 ElemType e;
 printf("输入入栈元素:\n");
 scanf("%d",&e);
 while(e!=-1){
  if(S.top-S.bottom==S.stacksize-1){
   printf("栈满");//此处用top-bottom=stacksize-1
   //判断栈是否已满,浪费了栈顶一个空间,
  }else{
  //此处采用先放元素再加加的方式
   *S.top=e;
   S.top++;
   scanf("%d",&e);
     }
 }
}


void Get_top(SQtack &S){//访问栈顶元素
 ElemType top_e;
 if(S.bottom!=S.top){
  top_e=*(S.top-1);
  printf("%d:栈顶\n",top_e);
 }
}


void Pop_stack(SQtack &S){
 ElemType a;
 if(S.top==S.bottom){
  printf("空栈");
 }else{
  S.top--;//先减减,再出栈
  a=*S.top;
  printf("%d:出栈\n",a);
 }
}


int main(){
 SQtack S;
 Init_stack(S); //初始化,栈
 Push_stack(S);//入栈
 Get_top(S);//访问栈顶元素,还在栈中 
 Pop_stack(S); //栈顶元素出栈
 Get_top(S);
 return 0;
}

猜你喜欢

转载自www.cnblogs.com/jiafeng1996/p/11297035.html