o Logo
首页
反馈
o Logo
首页 反馈
  1. 首页
  2. 数据结构与算法
  3. 栈

栈

  • 数据结构与算法
  • 发布于 2025-08-29
  • 43 次阅读
o
o
//栈  stack.h
#ifndef __STAXK_H__
#define __STAXK_H__
//结构体类型,表示栈
typedef struct stack{
    int* arr;//记录存储区首地址
    int top;//元素下标
    int cap;//容量
} stack_t;

//栈的操作
//栈的初始化    stack_t s   s.arr   s.top  s.cap
void stack_init(int cap,stack_t* s);
//栈的释放
void stack_deinit(stack_t* s);
//判满  满1 非满0
int stack_full(stack_t* s);
//判空  满1 非满0
int stack_empty(stack_t* s);
//压栈
void stack_push(stack_t* s,int data);
//弹栈
int stack_pop(stack_t* s);
#endif //__stack_H__
//栈的实现  stack.c
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"

//栈的初始化
void stack_init(int cap, stack_t *s){
    s->arr = malloc(sizeof(int) * cap);
    s->top = 0;
    s->cap = cap;
}

//栈的释放
void stack_deinit(stack_t* s){
    free(s->arr);
    s->arr = NULL;
    s->top = 0;
    s->cap = 0;
}
//判满
int stack_full(stack_t *s){
    return (s->top == s->cap ? 1 : 0);
}
//判空
int stack_empty(stack_t *s){
    return (s->top == 0 ? 1 : 0);
}
//压栈
void stack_push(stack_t *s, int data){
    s->arr[s->top]= data;
    s->top++;
}
//弹栈
int stack_pop(stack_t *s){
    return s->arr[--(s->top)];
}

#include<stdio.h>
#include"stack.h"
int main(){
    stack_t sk;
    //初始化
    stack_init(5,&sk);
    //压栈
    int data=1;
    while(stack_full(&sk) != 1){
        stack_push(&sk,data);
        data++;
    }
    //弹栈
    while(stack_empty(&sk) != 1){
        printf("%d",stack_pop(&sk));
    }
    printf("\n");
    //释放
    stack_deinit(&sk);
    return 0;
}