首页 > 其他分享 >04链式栈

04链式栈

时间:2023-08-08 22:45:22浏览次数:26  
标签:return 04 StackPush next pLinkStack 链式 NULL data

LinkedStack.h

#ifndef _LINKEDSTACK_H
#define _LINKEDSTACK_H

typedef int data_t;

typedef struct node
{
    data_t data;
    struct node *next;
} listnode, *pLinkStack;

pLinkStack StackCreate();
int StackPush(pLinkStack s, data_t value);
data_t StackPop(pLinkStack s);
int StackEmpty(pLinkStack s);
data_t StackTop(pLinkStack s);
pLinkStack StackFree(pLinkStack s);
int StackShow(pLinkStack s);

#endif

LinkedStack.c

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

pLinkStack StackCreate()
{
    pLinkStack s = (pLinkStack)malloc(sizeof(listnode));
    if (s == NULL)
    {
        printf("StackCreate:Space allocation failed\n");
        return NULL;
    }

    s->data = 0;
    s->next = NULL;

    return s;
}

int StackPush(pLinkStack s, data_t value)
{
    if (s == NULL)
    {
        printf("StackPush:invalid parameter\n");
        return -1;
    }

    pLinkStack p = (pLinkStack)malloc(sizeof(listnode));
    if (p == NULL)
    {
        printf("StackPush:Space allocation failed\n");
        return -1;
    }

    p->data = value;
    p->next = s->next;
    s->next = p;
    return 0;
}

data_t StackPop(pLinkStack s)
{
    data_t temp_val;
    pLinkStack p;
    if (s == NULL)
    {
        printf("StackPop:invalid parameter\n");
        return -1;
    }
    temp_val = s->next->data;
    p = s->next;
    s->next = p->next;
    p->next = NULL;
    free(p);

    return temp_val;
}

int StackEmpty(pLinkStack s)
{
    if (s == NULL)
    {
        printf("StackEmpty:invalid parameter\n");
        return -1;
    }

    if (s->next != NULL)
    {
        return 0;
    }
    return 1;
}

data_t StackTop(pLinkStack s)
{
    if (s == NULL)
    {
        printf("StackTop:invalid parameter\n");
        return -1;
    }

    return s->next->data;
}

pLinkStack StackFree(pLinkStack s)
{
    pLinkStack p;
    if (s == NULL)
    {
        printf("StackTop:invalid parameter\n");
        return NULL;
    }

    while (s != NULL)
    {
        p = s;
        s = s->next;
        printf("free:%d\n", p->data);
        free(p);
    }

    return NULL;
}

int StackShow(pLinkStack s)
{
    if (s == NULL)
    {
        printf("StackShow:invalid parameter\n");
        return -1;
    }

    pLinkStack p = s->next;
    while (p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    puts("");
    return 0;
}

main.c

#include <stdio.h>
#include "LinkedStack.h"

void test_StackPush();
void test_StackPop();

int main(int argc, char const *argv[])
{
    // test_StackPush();
    test_StackPop();
    return 0;
}

void test_StackPush()
{
    pLinkStack s = StackCreate();
    StackPush(s, 1);
    StackPush(s, 2);
    StackPush(s, 3);
    StackPush(s, 4);
    StackPush(s, 5);
    StackPush(s, 6);

    StackShow(s);
}

void test_StackPop()
{
    pLinkStack s = StackCreate();
    StackPush(s, 1);
    StackPush(s, 2);
    StackPush(s, 3);
    StackPush(s, 4);
    StackPush(s, 5);
    StackPush(s, 6);

    StackShow(s);

    StackPop(s);
    StackShow(s);
}

标签:return,04,StackPush,next,pLinkStack,链式,NULL,data
From: https://www.cnblogs.com/goldenFantome/p/17615574.html

相关文章

  • 04-非连续内存分配
    04-非连续内存分配为什么需要非连续内存分配连续内存分配的缺点1)分配给一个程序的物理内存是连续的2)内存利用率较低3)有外碎片、内碎片的问题非连续内存分配的优点一个程序的物理地址空间是非连续的更好的内存利用和管理允许共享代码与数据(共享库)支持动态加载和动态链接......
  • 20天 hot 100 速通计划-day04
    普通数组238.除自身以外数组的乘积给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(*n*)时间复杂度内......
  • ubuntu18.04 使用netplan配置静态IP
    1.cd/etc/netplan2.sudovim/etc/netplan/*.yamlnetwork:ethernets:enp0s3:dhcp4:falseaddresses:[192.168.10.45/24]#静态IPv4gateway4:192.168.10.255#网关nameservers:addresses:[119.29.29.29]#DNS地......
  • Ubuntu 16.04 安装python3.6正确顺序(解决ssl错误,pip升级)
    0、下载离线python压缩包PythonSourceReleases|Python.org,1、新建root,并进入root权限(sudopasswdroot)(su)2、升级openssl版本wgethttps://www.openssl.org/source/openssl-1.1.0k.tar.gztar-zxvfopenssl-1.1.0k.tar.gzcdopenssl-1.1.0k./configmakeinstall......
  • P9504 『MGOI』Simple Round I | C. 魔法禁林
    赛时第一眼看,是个无向图,求一个点到另外一个点的最小值,诶,这不裸的最短路嘛,然后兴高采烈地倒着跑了个dijkstra,喜提\(30\)分。仔细一看,\(w\le100\),发现当\(k>100\)时,生命就是永恒的,于是加了个剪枝,就过啦。具体地,正常的最短路量有一个,本题有两个。于是我们定义\(dist_{i,j}......
  • 免屏实现精准较时设定电子药盒语音芯片IC解决方案,NV040C-S8
    随着人们对生活品质的要求不断提高,电子设备也逐渐普及,特别是在医疗设备领域,创新的电子设备不断涌现,例如具有语音识别功能的电子药盒。然而,普通语音识别技术因为误判率高而有很大局限性,而全球领先的专业音频芯片IC生产商——九芯电子于近日推出了一款免屏实现精准较时设定电子药盒语......
  • 【2023-08-04】适应波动
    20:00我们可以自己选择自己的情绪,快乐或者不快乐。                                                 ——尼采今年生意确实不好做。许多商机大概率都被取消、压缩、延......
  • 【Java设计模式004】建造者模式
    大家好,个人gzh是大猪和小猪的小家,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!概述首先来看一个例子,假设我们需要建造一个房子,那么必须建造墙、屋顶、地板、门…如果还需要游泳池、健身室,那么该怎么办呢......
  • 代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
    20.有效的括号    卡哥建议:讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。 大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%8......
  • 【题解】Luogu[P9504] 『MGOI』Simple Round I C. 魔法禁林
    Link这题我们发现如果直接去枚举生命和法力值显然是不行的,又看到说最小的生命值,不禁想到最短路,但是怎么跑?我们令经过一条边之前魔力值为\(k\),那么该边的边权为\(\lfloor\dfrac{w}{k}\rfloor\),于是我们讲题目转化为了边权为\(\lfloor\dfrac{w}{k}\rfloor\)时\(s\)到\(t\)......