StaticStack 静态栈C语言算法(数组栈)

静态栈

通过数组形式表示的静态栈,代码量和复杂程度都比较低,且在读取时可以快速访问,但是栈的空间大小固定,当处理不确定数据量的运算时容易出现栈满情况。

因此静态栈的方法普遍适用于数据量确定或范围大致确定的运算,例如可以运用于汉罗塔游戏运算、算数优先级运算程序等。

实现功能

  1. 初始化栈
  2. 入栈
  3. 出栈
  4. 清空栈
  5. 取栈的大小
  6. 打印栈的内容

代码

GitHub:https://github.com/MagicDevilZhang/myDataStructProject/blob/master/StaticStack.cpp

以下代码纯手工编写,欢迎指出错误和优化方法。

/**
 * @ProjectName:StaticStack 静态栈的算法实现(数组栈)
 * @Author: MagicDevil.Top (MagicDevil.Zhang@gmail.com)
 * @Description: 实现功能:初始化栈、入栈、出栈、清空栈、取栈的大小、打印栈的内容
 */

#include <stdio.h>
#include <windows.h>

#define SUCCESS 1
#define ERROR -1

#define ElemType int
#define StatusType int
#define MAX 100

typedef struct StackNode
{
    ElemType data[MAX];
    int top;
} StackNode, *Stack;

//1.初始化栈空间
StatusType InitStack(Stack &S)
{
    S = (Stack)malloc(sizeof(StackNode));
    S->top = -1;
    return SUCCESS;
}

//2.入栈
StatusType PushStack(Stack &S, ElemType content)
{
    if (S->top < MAX - 1 && content != ERROR)
    { //当栈未满
        S->data[++S->top] = content;
        return SUCCESS;
    }
    return ERROR;
}

//3.出栈
ElemType PopStack(Stack &S)
{
    if (S->top != -1)
    {
        return (S->data[S->top--]);
    }
    return ERROR;
}

//4.清空栈
StatusType ClearStack(Stack &S)
{
    S->top = -1;
}

//5.取栈的大小
int getStackNum(Stack &S)
{
    return S->top + 1;
}

//6.打印栈的内容
StatusType PrintStack(Stack &S)
{
    int getStackNum(Stack & S);
    printf("Stack Information\n");
    for (int i = 0; i <= S->top; i++)
    {
        printf(" |- Stack %d : %d\n", i, S->data[i]);
    }
    printf("Num : %d\n", getStackNum(S));
    return SUCCESS;
}

int main(int argc, char const *argv[])
{

    Stack stack, q;
    InitStack(stack);
    InitStack(q);

    PushStack(stack, 1);
    PushStack(stack, 3);
    PushStack(stack, 5);
    PushStack(stack, 7);

    PrintStack(stack);

    PushStack(q, PopStack(stack));
    PushStack(q, PopStack(stack));
    PushStack(q, PopStack(stack));
    PushStack(q, PopStack(stack));
    PushStack(q, PopStack(stack));
    PrintStack(q);

    printf("%d\n", getStackNum(stack));

    system("pause");
    return 0;
}

Studying & Working in Programming and Photography.
E-mail : MagicDevil.Zhang@gmail.com
More About Me : www.magicdevil.top
Love Sharing & Open Source.

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试