首页 > 其他分享 >数据结构day4(栈)

数据结构day4(栈)

时间:2024-07-26 21:28:01浏览次数:9  
标签:NULL return ss day4 int ls 数据结构 top

seqstack

系统中的栈 是在缓存区上   
数据结构中的栈 在堆上  
 

========================
1、空增栈
2、空减栈
3、满增栈
4、满减栈

   空栈 ,top指示器,表示的是新元素待插入的位置

满栈,top指示器指的是, 最后压栈的元素的位置

顺序栈的基本操作:

#include "seqstack.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
SeqStack *CreateSeqStack(int size)     //创建栈
{
    SeqStack* ss = ( SeqStack*)malloc(sizeof(SeqStack));
    if(NULL ==ss)
    {
        perror("CreateSeqStack error malloc1");
        return NULL;
    }
    ss->head = ( DATATYPE*)malloc(sizeof(DATATYPE)*size);
    if(NULL ==ss->head)
    {
        perror("CreateSeqStack error malloc2");
        return NULL;
    }
    ss->tlen = size;
    ss->top =  0;
    return ss;
}

int PushSeqStack(SeqStack *ss, DATATYPE *data)   //入栈或者说压栈
{
    if(NULL == ss ||NULL ==data)
    {
        fprintf(stderr,"SeqStack or data  is null \n");
        return 1;
    }
    if(IsFullSeqStack(ss))
    {
        fprintf(stderr,"PushSeqStack full\n");
        return 1;
    }

    memcpy(&ss->head[ss->top],data,sizeof(DATATYPE));
    ss->top++;
    return 0;
}

int PopSeqStack(SeqStack *ss)       //出栈或者说弹栈
{
    if(NULL == ss )
    {
        fprintf(stderr,"SeqStack  is null \n");
        return 1;
    }
    if(IsEmptySeqStack(ss))
    {
        fprintf(stderr,"PopSeqStack is empty \n");
        return 1;
    }
    ss->top--;
    return 0;
}

int IsEmptySeqStack(SeqStack *ss)    //判断是否为空
{
    return 0 == ss->top;
}

int IsFullSeqStack(SeqStack *ss)     //判断是否为满
{
    return ss->top == ss->tlen;
}

DATATYPE *GetTopSeqStack(SeqStack *ss)   //获得栈顶的元素
{
    if(IsEmptySeqStack(ss))
    {
        return NULL;
    }
    return &ss->head[ss->top-1];
}

int DestroySeqStack(SeqStack *ss)   //销毁栈
{
    free(ss->head);
    free(ss);
    return 0;
}

链栈的基本操作:

#include "linkstack.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
LinkStackList *CreateLinkStackList()
{
   LinkStackList *ls=(LinkStackList*)malloc(sizeof(LinkStackList));
   if(NULL == ls)
   {
       perror("CreateLinkStackList malloc");
       return NULL;
   }
   ls->top =NULL;
   ls->clen = 0 ;
   return ls;

}

int PushLinkStack(LinkStackList *ls, DATATYPE *data)
{
    LinkStackNode* newnode = malloc(sizeof(LinkStackNode));
    if(NULL == newnode)
    {
        perror("PushLinkStack malloc");
        return 1;
    }
    memcpy(&newnode->data,data,sizeof(DATATYPE));
    newnode->next = NULL;
    if(IsEmptyLinkStack(ls))
    {
        ls->top = newnode;
    }
    else
    {
        newnode->next = ls->top;
        ls->top = newnode;
    }
    ls->clen++;
    return 0;
}

int PopLinkStack(LinkStackList *ls)
{
    if(IsEmptyLinkStack(ls))
    {
        return 1;
    }
    LinkStackNode* tmp = ls->top;
    ls->top = ls->top->next;
    free(tmp);
    ls->clen--;
    return 0 ;
}

int IsEmptyLinkStack(LinkStackList *ls)
{
    return 0 == ls->clen;
}

int GetSizeLinkStack(LinkStackList *ls)
{
    return ls->clen;
}

DATATYPE *GetTopLinkStack(LinkStackList *ls)
{
    if(IsEmptyLinkStack(ls))
        return NULL;
    return &ls->top->data;
}

int DestroyLinkStack(LinkStackList *ls)
{
    int len = GetSizeLinkStack(ls);
    int i = 0 ;
    for(i = 0 ;i<len;i++)
    {
        PopLinkStack(ls);
    }
    free(ls);
    return 0;
}

标签:NULL,return,ss,day4,int,ls,数据结构,top
From: https://blog.csdn.net/weixin_66436813/article/details/140715145

相关文章

  • MySQL数据结构和索引
    一、MySQL数据结构InnoDB引擎MySQL默认引擎是InnoDB引擎,这个引擎的主要特点是支持事务和行锁,数据结构2.1二叉树(二叉查找树)二叉树是一种特殊的树,二叉树中每个节点的度都不能大于2,就是说每个节点最多只能有左右两个子节点当我们像二叉查找树储存数据的时候,是安装从大到小(或......
  • 可持久化数据结构
    可持久化数据结构简介分类部分可持久化所有版本都可以访问,但是只有最新版本可以修改。完全可持久化所有版本都既可以访问又可以修改。实际应用几何计算(扫描线),字串处理(合并操作rope),版本回溯,函数式编程。可持久化线段树引入[P3834【模板】可持久化线段树2]首先考虑静态......
  • 数据结构 二叉树 前 中 后 序列
    简单二叉树的遍历如果看完还是不太懂就观看速成视频https://www.bilibili.com/video/BV1Ub4y147Zv/?spm_id_from=333.337.search-card.all.click&vd_source=e5f8765d50fb89ef04eb150bd76075b5引用资料文献链接放到篇尾简单术语解释节点(Node):二叉树中的一个元素,包含值和......
  • 【数据结构与算法】快速排序万字全攻略:hoare版本、挖坑法、前后指针法、优化版、非递
          ......
  • 黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4
    你好,我是Qiuner.为帮助别人少走弯路和记录自己编程学习过程而写博客这是我的githubhttps://github.com/Qiuner⭐️giteehttps://gitee.com/Qiuner......
  • 软考-软件设计师(3)-数据结构与算法:树、图、队列、查找算法、排序算法、霍夫曼编码/
    场景软考-软件设计师-数据结构与算法模块高频考点整理。以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。注:博客:霸道流氓气质-CSDN博客实现知识点树:节点的度、树的度、深度、高度、满二叉树、完全二叉树、平衡二叉树、B树、二叉排序树节点......
  • Day4-控制语句
    1.分支语句1.1顺序语句,分支语句,循环语句分支语句if()~else~switch循环语句for()while()~do~while()goto辅助控制语句continuebreakreturn1.2if~else语句的使用if语句概述if(表达式)语句块1else......
  • 算法与数据结构 -随笔
    1.LinkedList1)Buildthelist2)Sortthelist3)Lookupsomeiteminthelist4)Insertionanddeletioninthelist5) Reversethelist6)JousephproblemWeshouldn'tlimitourselvestoonlymoveonesinglestepbyusing......
  • 【数据结构】单链表的增删改查
    介绍链表是有序的列表,但是它在内存中是如下存储的:①链表以节点的方式进行存储,是链式存储的②每个节点包含data域、next域:指向下一节点③链表的各个节点不一定是连续存放的④链表分为有头节点的链表和没有头节点的链表 head节点1.不存放具体数据2.作用就是表示......
  • 山东大学数据结构与算法实验10堆及其应用(堆的操作/霍夫曼编码)
    A : 堆的操作题目描述创建 最小堆类。最小堆的存储结构使用 数组。提供操作:插入、删除、初始化。题目第一个操作是建堆操作,接下来是对堆的插入和删除操作,插入和删除都在建好的堆上操作。输入输出格式输入第一行一个数n(n<=5000),代表堆的大小。第二行n个数,代表堆的......