当前位置: 首页 > article >正文

数据结构(栈结构之顺序栈操作实现一)

目录

一.栈结构之顺序栈操作实现

1.项目结构以及初始代码

2.初始化栈结构

3.入栈操作并显示

4.出栈操作并显示出栈元素

5.获取栈长度

6.清空栈

7.销毁栈

8.动态扩展栈空间


一.栈结构之顺序栈操作实现

1.项目结构以及初始代码

SeqStack.h

#ifndef __SEQSTACK_H__
#define __SEQSTACK_H__

#include <stdio.h>
#include <malloc.h>
#include <assert.h>

#define ElemType int
#define STACK_INIT_SIZE 8

typedef struct SeqStack
{
    ElemType* base;
    int capacity;
    int top;// 指示栈顶位置,也表示栈中的元素个数
}SeqStack;

#endif

SeqStack.c

#include "SeqStack.h"

main.c

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

int main(int argc, char** argv)
{
    SeqStack st;


        return 0;
}

要学习更多嵌入式C的知识,可以扫码关注


2.初始化栈结构

SeqStack.h

void InitStack(SeqStack* s);

SeqStack.c

void InitStack(SeqStack* s)
{
    s->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);
    assert(s->base != NULL);

    s->capacity = STACK_INIT_SIZE;
    s->top = 0;
}

main.c

3.入栈操作并显示

SeqStack.h

SeqStack.c

// 辅助函数,判断栈是否为空或者满
int isFull(SeqStack* s)
{
        if (s->top >= s->capacity)
        {
            return 1;
        }
        else
        {
            return 0;
        }
}


int isEmpty(SeqStack* s)
{
        if (s->top == 0)
        {
            return 1;
        }
        else
        {
            return 0;
        }
}

void Push(SeqStack* s, ElemType x)
{
        if (isFull(s) == 1)
        {
            printf("栈空间已满,%d不能入栈.\n",x);
            return;
        }
    
    
        s->base[s->top] = x;
        s->top++;
}

void Show(SeqStack* s)
{
        for (int i = s->top - 1; i >= 0; i--)
        {
            printf("%d\n", s->base[i]);
        }
}

main.c

4.出栈操作并显示出栈元素

SeqStack.h

SeqStack.c

int GetTop(SeqStack* s, ElemType* v)
{
        if (isEmpty(s))
        {
            printf("栈空间已空,不能取栈顶元素.\n");
            return 0;
        }
        *v = s->base[s->top - 1];// 不能写成*v = s->base[s->top--];因为s->top--会有出栈操作
        return 1;
}

void Pop(SeqStack* s)
{
        if (isEmpty(s))
        {
            printf("栈空间已空,不能出栈.\n");
            return;
        }

    s->top--;
}

main.c

5.获取栈长度

SeqStack.h

SeqStack.c

int Length(SeqStack* s)
{
     return s->top;
}

6.清空栈

SeqStack.h

SeqStack.c

void Clear(SeqStack* s)
{
    s->top = 0;
}

main.c

7.销毁栈

SeqStack.h

SeqStack.c

void Destroy(SeqStack* s)
{
    free(s->base);
    s->base = NULL;
    s->capacity = 0;
    s->top = 0;
}

8.动态扩展栈空间

SeqStack.h

SeqStack.c

int Inc(SeqStack* s)
{
        ElemType* newbase = (ElemType*)realloc(s->base,sizeof(ElemType) * (s->capacity + STACK_INC_SIZE));
        if (newbase == NULL)
        {
            printf("内存不足,无法申请空间.\n");
            return 0;
        }
    
        s->base = newbase;
        s->capacity += STACK_INC_SIZE;
    
        return 1;
}

main.c

如果你对C语言 和其他先进技术感兴趣,请别忘了点赞👍、收藏⭐️,并关注我们! 我们将持续为大家带来更多精彩内容,探索嵌入式C语言的无限可能!一起站在科技的前沿,迈向更美好的未来🌟。


http://www.kler.cn/a/529013.html

相关文章:

  • 一文大白话讲清楚webpack基本使用——17——Tree Shaking
  • 14-9-1C++STL的set容器
  • 单细胞-第四节 多样本数据分析,下游画图
  • 高性能消息队列Disruptor
  • CSS 中调整元素大小的全面指南
  • 5. 【Vue实战--孢子记账--Web 版开发】-- 主页UI
  • C++ 字母大小写转换两种方法统计数字字符的个数
  • 【股票数据API接口47】如何获取股票指历史分时KDJ数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 远程连接-简化登录
  • 进程控制-前篇
  • OpenCV:SURF、OBR特征检测
  • IS-IS 数据包类型 | 实验
  • TCL C++开发面试题及参考答案
  • Docker容器数据恢复
  • 【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • Autogen_core源码:_cache_store.py
  • C# 类与对象详解
  • 1.4第1章DC/DC变换器的动态建模-1.4状态空间平均法--电力电子系统建模及控制 (徐德鸿)--读书笔记
  • [NOIP1997 普及组] 棋盘问题
  • 一、TensorFlow的建模流程
  • 受限玻尔兹曼机:原理、实现、与神经网络对比及应用
  • 从理论到实践:Linux 进程替换与 exec 系列函数
  • 29.Word:公司本财年的年度报告【13】
  • 嵌入式C语言:大小端详解
  • 2.1.3 相机图像信号处理的基本流程
  • Python3 【闭包】避坑指南:常见错误解析