数据结构:链式栈

stack.h

cs 复制代码
/*===============================================
*   文件名称:stack.h
*   创 建 者:cxy     
*   创建日期:2024年01月18日
*   描    述:
================================================*/
#ifndef _STACK_H
#define _STACK_H

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

typedef struct stack{
    int data;
    struct stack *top;
}Stack,*Pstack;

int init(Pstack *P);
int empty(Pstack p);
int push_stack(Pstack p,int data);  //尾插
int pop_stack(Pstack p,int *data);  //只能从尾巴出栈,在一端操作(栈顶)
int clear(Pstack p);

#endif

stack.c

cs 复制代码
/*===============================================
*   文件名称:stack.c
*   创 建 者:     
*   创建日期:2024年01月18日
*   描    述:
================================================*/
#include "stack.h"

int init(Pstack *P)
{
    *P = malloc(sizeof(Stack));
    if(NULL == *P)
    {
        perror("init err:*P");
        return -1;
    }

    (*P)->top = NULL;
}

int empty(Pstack p)
{
    if(NULL == p)
    {
        perror("empty err:p");
        return -1;
    }

    if(p->top == NULL)
        return 1;
    else
        return 0;
}

int push_stack(Pstack p,int data)
{
    if(NULL == p)
    {
        perror("push err:p");
        return -1;
    }

    Pstack q = malloc(sizeof(Stack));
    if(NULL == q)
    {
        perror("push err:q");
        return -1;
    }

    while(p->top != NULL)
        p = p->top;

    q->data = data;
    q->top = p->top;
    p->top = q;
   
    return 0;
}

int pop_stack(Pstack p,int *data)
{
    if(NULL == p)
    {
        perror("pop err:p");
        return -1;
    }
    if(empty(p))
    {
        perror("pop err:empty");
        return -1;
    }

    while(p->top->top != NULL)
        p = p->top;
    
    Pstack q = p->top;
    *data = q->data;
    p->top = q->top;
    free(q);
    
    return 0;
}

int clear(Pstack p)
{
    if(NULL == p)
    {
        perror("clear err:p");
        return -1;
    }

    Pstack q = p;
    while(p->top != NULL)
    {
        q = p->top;
        p->top = q->top;
        free(q);
    }

    return 0;
}

mian.c

cs 复制代码
/*===============================================
*   文件名称:main.c
*   创 建 者:     
*   创建日期:2024年01月18日
*   描    述:
================================================*/
#include "stack.h"

int main(int argc, char *argv[])
{ 
    Pstack p;
    init(&p);

    int data;

    printf("**********empty,1为空**********\n");
    data = empty(p);
    printf("%d\n",data);
 
    printf("**********push_stack**********\n");
    data = 5;
    while(data--)
    {
        push_stack(p,data);
        printf("入栈数据为:%d\n",data);
    }
    printf("**********empty,1为空**********\n");
    data = empty(p);
    printf("%d\n",data);
   
    printf("**********pop_stack**********\n");
    data = 5;
    int num = 0;
    while(data--)
    {
        pop_stack(p,&num);
        printf("出栈数据为:%d\n",num);
    }
    
    printf("**********clear**********\n");
    clear(p);
    printf("**********empty,1为空**********\n");
    data = empty(p);
    printf("%d\n",data);
    
    
        return 0;
} 

结果

相关推荐
千千寰宇5 分钟前
[数据库系统] 数据库系统的设计原理研究
数据结构·数据库·database-opengemini/influxdb·database-dament/达梦
殷色玫瑰1 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc
字节跳动的猫1 小时前
LikeShop 商品评价体系二开:追评、晒图审核与评价标签筛选功能开发
运维·数据结构·数据库
All for pursuit.3 小时前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
信奥卷王3 小时前
[GESP202512 六级] 路径覆盖
数据结构·算法
INGNIGHT3 小时前
1861 · 老鼠跳跃(坐标型dp)
数据结构·c++
0+1113 小时前
算法 --归并排序
数据结构·算法·排序算法
字节跳动的猫4 小时前
LikeShop 种草社区模块二开:笔记发布、话题广场与商品挂载实现
数据结构·数据库
一棵树73514 小时前
数据结构闲聊
数据结构·算法
bro_Java6664 小时前
《二叉树的基础知识、操作方法与代码示例》
java·数据结构·算法·广度优先