顺序栈的实现

#include<stdio.h>
#include<stdlib.h>

typedef int DataType;
typedef struct Stack {
 DataType* arr;
 int size;
 int capacity;
}Stack;

//初始化
void StackInit(Stack* st, int n) {
 //创建一个n个元素的栈
 st->size = 0;
 st->capacity = n;
 st->arr = (DataType*)malloc(sizeof(DataType) * n);
}

//进栈
void StackPush(Stack* st, DataType data) {
 //插入时先检查栈是否已满
 if (st->size >= st->capacity) {
  //扩容
  st->capacity += st->capacity;
  st->arr = (DataType*)realloc(st->arr, st->capacity * sizeof(DataType));
 }
 //尾插
 st->arr[st->size] = data;
 st->size++;
}

//出栈
void StackPop(Stack* st) {
 if (st->size == 0) {
  //空栈, 删除失败
  return;
 }
 //尾删
 st->size--;
}

//得到栈顶元素
DataType getStackTop(Stack* st) {
 return st->arr[st->size - 1];
}

//得到栈的大小
int getStackSize(Stack* st) {
 return st->size;
}

//判空
int StackEmpty(Stack* st) {
 if (st->size == 0) {
  return 1;
 }
 return 0;
}

//销毁
void StackDestory(Stack* st) {
 free(st->arr);
 st->arr = NULL;
 st->capacity = 0;
 st->size = 0;
}

void stackprint(Stack* st) {
 //这个借口只供测试用, 不供给用户
 for (int i = st->size - 1; i >= 0; i--) {
  printf("%d ", st->arr[i]);
 }
 printf("\n");
}

int main() {
 Stack st;
 StackInit(&st, 5);
 StackPush(&st, 1);
 StackPush(&st, 2);
 StackPush(&st, 3);
 StackPush(&st, 4);
 StackPush(&st, 5);
 stackprint(&st);
 StackPop(&st);
 stackprint(&st);
 StackPop(&st);
 stackprint(&st);
 DataType top = getStackTop(&st);
 printf("top : %d\n", top);
 int size = getStackSize(&st);
 printf("size = %d\n", size);
 //这里一般取栈顶元素之前要调用判空函数
 if (StackEmpty(&st) == 0) {
  DataType top1 = getStackTop(&st);
  printf("top : %d\n",top1);
 }

 system("pause");
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殇&璃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值