IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言数组实现栈 -> 正文阅读

[C++知识库]C语言数组实现栈

学习笔记…

#include<stdio.h>
#include<stdlib.h>
#define Error( Str )    fprintf( stderr, "%s\n", Str ), exit( 1 )//可大量简化后面代码量
#define EmptyTOS -1
#define MinStackSize 5

typedef int ElementType;

typedef struct StackRecord{
    int TopOfStack;           //栈顶
    int Capacity;             //容量域
    ElementType *array;       //存储元素的数组
}*Stack;
//判断是否为空
int IsEmpty(Stack S)
{
    return S->TopOfStack == EmptyTOS;
}
//判断是否满栈
int IsFull(Stack S)
{
    return S->TopOfStack == S->Capacity - 1;
}
//清空栈
void MakeEmpty(Stack S)
{
    S->TopOfStack = EmptyTOS;//直接使TopOfStack为-1
}
//创建栈
Stack CreateStack(int MaxElement)
{
    Stack S;

    if(MaxElement < MinStackSize){
        Error("Stack Size is too small!");
    }
    S = malloc(sizeof(struct StackRecord));
    if(S == NULL)
        Error("Out of space!!!");
    S->array = malloc(sizeof(ElementType) * MaxElement);//开辟一个空间为sizeof(ElementType) * MaxElement位的空间
    if(S->array == NULL)
        Error("Out of space!");
    S->Capacity = MaxElement;
    MakeEmpty(S);
    return S;
}

void Push(ElementType X, Stack S)
{
    if(IsFull(S))
        Error("Full Stack");
    S->array[++S->TopOfStack] = X;//++S->TopOfSrack是 S->TopOfSrack立马增一
}

void Pop(Stack S)
{
    if(IsEmpty(S))
        Error("Empty Stack");
    S->TopOfStack--;
}

ElementType TopAndPop(Stack S)
{
    if(!IsEmpty(S))
        return S->array[S->TopOfStack--];
    else
    {
        Error("Empty Stack");
        return 0;
    }
}
//销毁栈
void DisposeStack(Stack S)
{
    if(S != NULL)
    {
        free(S->array);
        free(S);
    }
}
//返回栈顶元素
ElementType Top(Stack S)
{
    if(!IsEmpty(S))
        return S->array[S->TopOfStack];
    else
    {
        Error("Empty Stack");
        return 0;
    }
}
//遍历并打印栈
void TravalStack(Stack S)
{
    if(!IsEmpty(S)){
        for(; S->TopOfStack != EmptyTOS; S->TopOfStack--){
            printf("%d\n",Top(S));

        }
    }
    else
        Error("Empty Stack");
}

int main(){
    Stack S;

    S = CreateStack(10);
    Push(7,S);
    Push(6,S);
    Push(5,S);
    Push(4,S);
    Push(3,S);

    printf("%d\n",Top(S));

    Pop(S);
    Pop(S);

    TravalStack(S);

    DisposeStack(S);
    return 0;

}

在这里插入图片描述
用数组实现栈花费时间为很小的常数 应该尽可能写出各种错误检测,如果错误检测的代码量确实很大,可以省略

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:26:28  更:2021-07-31 16:27:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 19:31:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码