数据结构-栈的基本操作(顺序栈)

栈的基本操作(顺序栈)

数据结构中栈的更多基本操作(用顺序栈实现)

1.栈的定义与初始化

  • 栈的定义
struct Stack{
  int *data; // 动态数组
  int maxlen;
  int top; // 栈顶指针
  //top == -1代表空栈,top == maxlen-1代表满栈
};
typedef struct Stack SeqStack;

由于是顺序结构,定义时就必须确定栈的最大长度maxlen,改用动态数组的形式可以更灵活的操控内存

  • 栈的初始化
SeqStack* Init(int maxl){
  /*初始化栈*/
  SeqStack* head = new SeqStack;
  head->data = new int[maxl];
  head->maxlen = maxl;
  head->top = -1; // 空栈时,栈顶指针为-1
  return head;
}

2.栈的销毁与清除

  • 栈的销毁
void Destroy(SeqStack* head){
	/*销毁栈,销毁后栈不存在*/
  if(head == NULL){
    return;
  }
  delete head->data;
  delete head;
}
  • 栈的清除
void Clear(SeqStack* head){
  /*清除栈,清除后栈仍热存在,为空栈*/
  if(head == NULL){
    return;
  }
  head->top = -1;
}

注意:栈的销毁和栈的清除的主要区别就在于,销毁后,栈在内存空间不复存在,他被彻底地从内存中删除了。而清除操作后。栈为空,栈仍然存在于内存空间中

3.压栈与弹栈

  • 压栈操作
int Push(SeqStack* head, int Elem){
  /*压栈,若压栈操作完成后栈满返回0,未操作时栈已满
  返回-1,否则,返回1*/
  if(head == NULL || head->top == head->maxlen-1){
    return -1;
  }
  head->data[++head->top] = Elem;
  if(head->top == head-<maxlen - 1){
    return 0;
  }
  else{
    return 1;
  }
}
  • 弹栈操作
int Pop(SeqStack* head, int* ELem){
  /*弹栈,若空栈,则返回0(操作前为空栈返回-1)
  否则,返回1*/
  if(head == NULL || head->top == -1){
    return -1;
  }
  *Elem = head->data[head->top--];
  if(head->top == -1){
    return 0;
  }
  else{
    return 1;
  }
}

4.其他基本操作

  • 判断栈是否为空
int IsEmpty(SeqStack * head){
  /*判断一个栈是否为空:若为空则返回1*/
  if(head == NULL || head->top == -1){
    return 1;
  }
  else{
    return 0;
  }
}
  • 求栈长
int Length(SeqStack* head){
  /*返回栈的长度(数据量)*/
  if(head == NULL){
    return 0;
  }
  return head->top+1;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值