顺序栈的实现

#include<stdio.h>

#include<stdlib.h>

#define MAXSIZE 100

#define OVERFLOW 0

#define ERROR 0

#define OK 1

typedef int Status;

typedef int SElemType;

typedef struct Node{

 SElemType* base;

 SElemType* top;

 size_t stacksize;

}Sqstack;

Status push(Sqstack *s,SElemType e) {

 if (s->top-s->base==s->stacksize) {

  return ERROR;

 }

 *(s->top) = e;

 (s->top)++;

 return OK;

}

Status pop(Sqstack* s,SElemType *e) {

 if (s->top == s->base) {

  return ERROR;

 }

 s->top = --(s->top);

 *e = *(s->top);

 return OK;

}

Status InitStack(Sqstack* s) {

 s->base = (SElemType*)malloc(MAXSIZE * sizeof(SElemType));

 if (s->base == NULL) {

  OVERFLOW;

 }

 s->top = s->base;

 s->stacksize = MAXSIZE;

 return OK;

}

int main() {

 Sqstack s;

 if (InitStack(&s) == OK) {

  printf("申请栈空间成功!\n");

 }

 else {

  printf("申请栈空间失败!\n");

 }

 int i,value;

 do {

  printf("压栈请按1,弹栈请按0,推出请按-1 : ");

  scanf_s("%d",&i,4);

  if (i == 1) {

   printf("\n请输入压栈数据 : ");

   scanf_s(" %d",&value,4);

   getchar();

   if (push(&s, value) == OK) {

    printf("\n压栈成功!\n");

   }

   else {

    printf("\n栈满!压栈失败!\n");

   }

  }

  else if (i == 0) {

   SElemType e;

   if (pop(&s,&e) == OK) {

    printf("\n弹栈成功,弹出数据为 : %d\n",e);

   }

   else {

    printf("\n栈空!弹栈失败!\n");

   }

  }

 } while (i != -1);

 free(s.base);

 return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值