数据结构-c语言代码实现-顺序栈的基本操作

动态分配顺序存储结构

#define Max 100
#define ElemType char

typedef struct{
    ElemType *Data;
    int Top;
}StackSq;

基本操作

  1. 初始化

void StackSq_Init(StackSq &S){
    S.Data=(ElemType *)malloc(sizeof(char)*Max);
    S.Top=-1;
    if(S.Data==NULL){
        printf("初始化失败\n");
        exit(-1);
    }
    else{
        printf("初始化成功\n");   
    }    
}
  1. 创建栈

void StackSq_Creat(StackSq &S){
    if(S.Top+1==Max){
        printf("创建栈失败\n");
    }
    printf("输入栈成员个数:");
    int num=0;
    scanf("%d",&num);
    getchar();
    while(S.Top+1<num){    
        printf("请输入入栈成员%d:\n",S.Top+2);
        scanf("%c",&S.Data[++S.Top]);
        getchar();
    }
}
  1. 入栈

void StackSq_Push(StackSq &S,ElemType newval){
    if(S.Top+1==Max){
        printf("栈满,入栈失败\n");
        exit(-1);
    }
    else{
        S.Data[++S.Top]=newval;
        printf("入栈成功\n");
    }
}
  1. 出栈

void StackSq_Pop(StackSq &S,ElemType &x){
    if(S.Top==-1){
        printf("栈空,出栈失败\n");
        exit(-1);
    }
    else{
        x=S.Data[S.Top--];
        printf("出栈成功\n");
    }
}
  1. 读取栈顶元素

ElemType StackSq_GetTopval(StackSq S){
    if(S.Top==-1){
        printf("栈空,读取栈顶元素失败\n");
        exit(-1);
    }
    else{
        printf("读取栈顶元素成功\n");
        return S.Data[S.Top]; 
    }
}
  1. 求栈长度

int StackSq_Length(StackSq S){
    return S.Top+1;
}
  1. 判空

void StackSq_Isvoid(StackSq S){
    if(S.Top !=-1){
        printf("栈不为空\n");
    }
    else{
        printf("栈为空\n");
    }
}
  1. 打印栈

void StackSq_Print(StackSq S){
    if(S.Top !=-1){
        while(S.Top!=-1){
            printf("%c ",S.Data[S.Top--]);
        }
        printf("打印成功\n");
    }
    else{
        printf("打印失败\n");
    }
}

代码实现结果

int main()
{
    StackSq S;
    StackSq_Init(S);
    StackSq_Creat(S);
    StackSq_Isvoid(S);
    StackSq_Print(S); 
    ElemType a;
    StackSq_Pop(S,a);
    StackSq_Print(S);
    printf("栈长度为:%d\n", StackSq_Length(S));
    StackSq_Push(S,a);
    StackSq_Print(S); 
    printf("栈顶元素为:%c\n", StackSq_GetTopval(S));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值