数据结构 通俗易懂版 c语言描述----栈及其基本操作

2022.2.10

栈及其基本操作

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

#define Max_op 50
#define ElemType int

typedef struct Stack 
{
    ElemType *data;
    int top,size;
}Stack;

//初始化
Stack * Init(int n){
    Stack *p=(Stack *)malloc(sizeof(Stack));
    p->data=(ElemType *)malloc(sizeof(ElemType)*n);
    p->size=n;
    p->top=-1;
    return p;
}

//判空*
bool Empty(Stack *p){
    if(p==NULL)return false;
    return p->top==-1;
}
//返回栈顶元素
ElemType FindTopElem(Stack *p){
    if(p==NULL)return false;
    if(Empty(p))return false;
    return p->data[p->top];
}

//入栈
bool push(Stack *p,int val){
    if(p==NULL)return false;
    if(p->top+1==p->size)return false;
    p->top+=1;
    p->data[p->top]=val;
    return true;
}
//出栈
bool pop(Stack *p){
    if(p==NULL)return false;
    if(p->top==-1)return false;
    p->top--;
    return false;
}
//销毁栈
bool Clear(Stack *p){
    if(p==NULL)return false;
    free(p->data);
    free(p);
    return true;
}
//输出栈
bool Output(Stack *p){
    if(p==NULL)return false;
    printf("Stack has %d elem\n[",p->top+1);
    for(int i=p->top;i>=0;i--){
        printf("%d-",p->data[i]);
    }
    printf("]\n");
}

//测试函数
int main(){
    srand(time(NULL));
    Stack *s=Init(Max_op);
    for(int i=0;i<Max_op;i++){
        int op=rand()%2,val=rand()%100;
        switch (op){
        
        case 0:{
            int a=push(s,val);
            printf("%d push to Stack==%d\n",val,a);
        }break;
        case 1:{
            printf("pop %d from Stack\n",s->data[s->top]);
            pop(s);
        }
        default:
            break;   
    }
        Output(s);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值