stack.h

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

typedef struct tag   //定义栈的节点结构体
{
    int val;
    struct tag* pnext;
}node, * pnode;

typedef struct {       //定义栈结构体
    int size;
    pnode phead;
}Stack, * pStack;

void initStack(pStack stack)  //初始化一个栈
{
    memset(stack, 0, sizeof(stack));
}

void pop(pStack stack)  				//弹栈
{
    if (!stack->phead) {
        printf("stack is empty");
        return;
    }
    pnode pcur;
    pcur = stack->phead;
    stack->phead = pcur->pnext;
    free(pcur);
    pcur = NULL;   //避免pcur变成野指针
}

void push(pStack stack,int val)           //压栈
{
    pnode pnew = (pnode)calloc(1, sizeof(node));
    pnew->val = val;
    pnew->pnext = stack->phead;
    stack->phead = pnew;
    stack->size++;
}
int size(pStack stack) {  //返回栈的大小
    return stack->size;
}
int top(pStack stack) {   //返回栈顶值
    if (!stack->size) {
        printf("stack is empty");
        return -1;
    }
    return stack->phead->val;
}

main.c

#include"stack.h"

int main()
{
    Stack stack;
    initStack(&stack);
    push(&stack, 5);
    push(&stack, 10);
    pop(&stack);
    int ret = top(&stack);
    return 0;
}

栈的顺序存储 C++

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

#define Maxsize 50

typedef int ElemType;

typedef struct {
    ElemType data[Maxsize];
    int top;
}SqStack;

void initStack(SqStack &stack) {
    stack.top = -1;
}

bool pop(SqStack& S, ElemType& x) {
    if (S.top == -1)
        return false;
    x = S.data[S.top--];
    return true;
}
bool push(SqStack& stack, ElemType val) {             //顺序存储 压栈
    if (stack.top == Maxsize - 1)
        return false;
    stack.data[++stack.top] = val;
    return true;
}
bool GetTop(SqStack& S, ElemType& x) {
    if (S.top == 1)
        return false;
    x = S.data[S.top];
    return true;
}
int main()
{
    SqStack stack;
    int x,ret;
    initStack(stack);
    push(stack, 5);
    push(stack, 10);
    pop(stack,x);
    GetTop(stack,ret);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值