首页 > 其他分享 >03顺序栈

03顺序栈

时间:2023-08-08 22:46:26浏览次数:31  
标签:03 顺序 return int StackPush pSqStack NULL stack

SqStack.h

#ifndef _SQSTACK_H
#define _SQSTACK_H

typedef int dataType;
typedef struct
{
    dataType *data;
    int capacity;
    int stackTop;
} SqStack, *pSqStack;

pSqStack StackCreate(int capacity);
dataType StackPop(pSqStack stack);
int StackPush(pSqStack stack, dataType val);
int StackEmpty(pSqStack stack);
int StackFull(pSqStack stack);
dataType StackTop(pSqStack stack);
int StackClear(pSqStack stack);
int StackFree(pSqStack stack);
int StackShow(pSqStack stack);

#endif

SqStack.c

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

pSqStack StackCreate(int capacity)
{
    pSqStack s = (pSqStack)malloc(sizeof(SqStack));
    if (s == NULL)
    {
        printf("StackCreate:pSqStack space allocation failed\n");
        return NULL;
    }

    s->data = (dataType *)malloc(capacity * sizeof(dataType));
    if (s->data == NULL)
    {
        printf("StackCreate:s->data space allocation failed\n");
        free(s);
        s = NULL;
        return NULL;
    }

    memset(s->data, 0, sizeof(dataType) * capacity);
    s->capacity = capacity;
    s->stackTop = -1;
    return s;
}

dataType StackPop(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackPop:invalid parameter.\n");
        return -1;
    }

    stack->stackTop--;
    return stack->data[stack->stackTop + 1];
}

int StackPush(pSqStack stack, dataType val)
{
    if (stack == NULL)
    {
        printf("StackPush:invalid parameter.\n");
        return -1;
    }

    if (stack->stackTop == stack->capacity - 1)
    {
        printf("The stack is full.\n");
        return -1;
    }

    stack->stackTop++;
    stack->data[stack->stackTop] = val;

    return 0;
}

int StackEmpty(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackEmpty:invalid parameter.\n");
        return -1;
    }
    return (stack->stackTop == -1 ? 1 : 0);
}

int StackFull(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackFull:invalid parameter.\n");
        return -1;
    }
    return (stack->stackTop == stack->capacity - 1 ? 1 : 0);
}

dataType StackTop(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackTop:invalid parameter.\n");
        return -1;
    }

    return stack->data[stack->stackTop];
}

int StackClear(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackClear:invalid parameter.\n");
        return -1;
    }

    stack->stackTop = -1;
    return 0;
}

int StackFree(pSqStack stack)
{
    if (stack == NULL)
    {
        printf("StackFree:invalid parameter.\n");
        return -1;
    }

    if (stack->data != NULL)
    {
        free(stack->data);
    }
    free(stack);
    return 0;
}

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

    for (int i = stack->stackTop; i != -1; i--)
    {
        printf("%d ", stack->data[i]);
    }
    printf("\n");
    return 0;
}

main.c

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

void test_StackPush();
void test_StackPop();
void test_StackClear();

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

void test_StackPush()
{
    pSqStack s = StackCreate(5);
    StackPush(s, 1);
    StackPush(s, 2);
    StackPush(s, 3);
    StackPush(s, 4);
    StackPush(s, 5);
    StackShow(s);
}

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

    StackPop(s);
    StackShow(s);
}

void test_StackClear()
{
    pSqStack s = StackCreate(5);
    StackPush(s, 1);
    StackPush(s, 2);
    StackPush(s, 3);
    StackPush(s, 4);
    StackPush(s, 5);
    StackShow(s);

    StackClear(s);
    StackShow(s);
}

标签:03,顺序,return,int,StackPush,pSqStack,NULL,stack
From: https://www.cnblogs.com/goldenFantome/p/17615566.html

相关文章

  • ❤ React03-JSX语法的使用
    ❤React03-JSX语法的使用3-1JSX基本使用JSX是React的核心JSX是ES的扩展jsx语法->普通的JavaScript代码->babelReact可以使用JSX的前提和原因:ReactJSX语法HTML语言直接写在JavaScript语言之中,不加任何引号,这就是JSX的语法,它允许HTML与JavaScript的混写var......
  • 线性表-顺序表的操作(增删查改,扩容,缩容)
    SeqList.h#include<stdio.h>#include<stdlib.h>typedefstructSeqList{ int*data; intsize; intcapacity;}SL;//顺序表的初始化voidSeqListInit(SL*ps);//顺序表的遍历voidSeqListPrint(SL*ps);//释放空间voidSeqDestroy(SL*ps);//缩容voi......
  • 【我和openGauss的故事】openEuler20.03上编译安装opengauss-5.0.0
    【我和openGauss的故事】openEuler20.03上编译安装opengauss-5.0.0ziyoo0830[openGauss](javascript:void(0);)2023-08-0316:49发表于四川为了更好地学习openGauss数据库知识,有时候需要去调试源代码来深入了解一些东西。以下记录了在openEuler20.03上编译最新的openGauss-serve......
  • 具备低功耗的S25FL256LAGMFM000、S25FL256LAGMFA003、S25FL256LAGMFA001(256Mb)NOR闪存
    FL-LNOR闪存系列具备低功耗和AEC-Q100汽车认证,并且能够在扩展温度范围内提供更高的读带宽和更快的编程速度。借助小巧、统一的4KB物理存储单元,该系列闪存产品能够以最佳方式存储程序代码和参数数据,是高级辅助驾驶系统(ADAS)、汽车仪表盘及信息娱乐系统、工业控制及智能工厂设备、网......
  • nebula nGQL中的WITH语句使用——和sql里with as的顺序是相反的
    SQL中的withas语句WITHAS短语,也叫做子查询部分(subqueryfactoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。比如withAas(select*fromclass)select*fromA这个语句的意思就是,先执行select*fromclass得到一个......
  • I'm not good at English. 我不太擅长英语。 I'm not very fluent in English yet.
    “我英语不好”:并不是MyEnglishispoor.可以说:I'mnotgoodatEnglish.我不太擅长英语。I'mnotveryfluentinEnglishyet.我的英语还不太流利。p.s.外国人的眼中,用poor来形容自己的水平,是一种自卑不自信的表现。如果真的英语不太好,或者想要谦虚一下,可以使用后两句......
  • ERROR:'ipconfig'不是内部或外部命令,也不是可运行的程序 && 解决配置环境变量时只显示
     解决方法: 输入cdc:\windows\system32进入该路径后输入ipconfig,即可得出ip地址。 拓:发现两个进入高级系统设置的方法。1.桌面.此电脑→右键.属性→高级系统设置2.桌面.控制面板→搜索.高级系统设置 拓:编辑环境变量的时候,解决配置环境变量时只显示一行的问题变量值......
  • c#的修饰符顺序以及修饰符说明,访问权限
    声明类的顺序:访问修饰符+类修饰符+class+类名例:publicclassClass1{}internalsealedclassClass2:Class1{}声明成员(方法或者参数)的顺序:访问修饰符+成员修饰符+值类型+类名例:publicoverrideintAA()publicnewintAA(intx)publicnewstaticinta=5;public......
  • 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......
  • vue3 'alex' is defined but never used
    解决方法在package.json中的rules下加入"no-unused-vars":"off"即可......