【C语言数据结构】栈-顺序存储(顺序栈)


栈-顺序存储

  • 代码实现


代码实现

#include
#include
#include

//栈的长度的固定为100
#define MaxSize 100
//元素数据类型
#define ElemType int

typedef struct{
    //整个栈的数据
    ElemType data[MaxSize];

    //栈顶指针(说是指针,其实就是个标识位置信息的变量)
    int top;
}SeqStack;

//初始化栈
void InitStack(SeqStack *stack){
    //所谓的初始化不过就是把这个指针设置为-1的位置上,表示当前栈里啥也没有。因为要是有一个元素,指针就指向0了。
    stack->top = -1;
};

//判断栈是否为空
bool StackEmpty(SeqStack stack){
    if(stack.top == -1)
        return true;
    return false;
}

//进栈操作
bool Push(SeqStack *stack,ElemType e){
    //进栈之前先判断栈满没满
    if(stack->top == MaxSize){
        return false;
    }

    //先让栈顶向上移动一个位置
    stack->top++;
    //把元素赋值到栈顶
    stack->data[stack->top] = e;
}

//出栈操作(若栈未空,则弹出栈顶元素,并用e返回)
bool Pop(SeqStack *stack,ElemType *e){
    //先判断栈是否为空
    if(StackEmpty(*stack)){
        return false;
    }
    //将栈顶元素赋值给e
    *e = stack->data[stack->top];

    //将top向下移动一个位置
    stack->top--;

    return true;
}

//获取栈顶元素,与Pop操作不同的是,这个只是读取栈顶元素,而不会将栈顶元素弹出。将读出的元素赋值给e
bool GetTop(SeqStack stack,ElemType *e){
    //判断栈是否为空
    if(StackEmpty(stack)){
        return false;
    }
    //将栈顶元素赋值给e
    *e = stack.data[stack.top];

    return true;
}

//销毁栈
void DestroyStack(SeqStack *stack){
    //只需要将栈顶元素置为-1即可
    stack->top = -1;
}

int main(){
    ElemType Elem;
    SeqStack stack;
    //初始化栈
    InitStack(&stack);

    //进栈一个元素
    Push(&stack,1);

    //读一下刚才进栈的元素
    GetTop(stack,&Elem);
    printf("当前栈顶元素为:%d\n",Elem);

    //出栈这个元素
    Pop(&stack,&Elem);
    //打印一下刚才出栈的元素
    printf("刚才出栈的元素为:%d\n",Elem);

    //销毁栈
    DestroyStack(&stack);

    return 0;
}

你可能感兴趣的:(数据结构,c语言,算法)