首页 > 其他 > 详细

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

时间:2019-08-04 11:22:18      阅读:88      评论:0      收藏:0      [点我收藏+]

#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;
}

技术分享图片

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

原文:https://www.cnblogs.com/jiafeng1996/p/11297035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!