首页 > 其他分享 >数据结构(3)(顺序栈)

数据结构(3)(顺序栈)

时间:2024-07-25 09:55:03浏览次数:10  
标签:SeqStack return ss DATATYPE top int 顺序 数据结构

 栈:

      栈是限定仅在栈顶进行插入和删除操作的线性表,在操作的时候,只允许栈顶改变不允许栈底改变,具有后进先出的特征。

顺序栈:

      顺序栈是一种使用数组实现的栈,也称为数组栈。其基本思路是通过数组来存储栈中的元素,并通过栈顶指针指示栈顶元素在数组中的位置。

     也就是说,相当于只能对最后一个元素进行增,删,查的数组。

基本操作:

#ifndef SEQSTACK_H
#define SEQSTACK_H

typedef struct{
    char name[32];
    char sex;
    int age;
    int score;
}DATATYPE;

typedef struct
{
   DATATYPE* head;
   int tlen;
   int top;// clen
}SeqStack;

SeqStack*CreateSeqStack(int size);  //创建
int DestroySeqStack(SeqStack*ss);  //销毁
int PushSeqStack(SeqStack*ss,DATATYPE*data);  //入栈
int PopSeqStack(SeqStack*ss);  //出栈
int IsEmptySeqStack(SeqStack*ss);  //判断栈是否为空
int IsFullSeqStack(SeqStack*ss);  //判断栈是否为满
int GetSizeSeqStack(SeqStack*ss);  //获取栈当前大小
DATATYPE*GetTopSeqStack(SeqStack*ss);  //获取栈顶元素
#endif // SEQSTACK_H

实现:

#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];
}

标签:SeqStack,return,ss,DATATYPE,top,int,顺序,数据结构
From: https://blog.csdn.net/qq_54094530/article/details/140681707

相关文章

  • SimPy仿真:集装箱码头如何保证单个集装箱卸货和顺序运输?
    我正在对集装箱码头进行SimPy模拟,船舶到达、停泊并使用起重机卸载集装箱,然后使用卡车进行运输。问题陈述_pt1、问题陈述_pt2我需要确保:每台起重机一次仅卸载一个集装箱。在有空卡车可用之前,起重机应继续其卸载过程,无论之前的卡车是否已完成......
  • 双向链表<数据结构 C版>
    目录关于链表的分类 双向链表结构体初始化尾插头插打印判断是否为空尾删头删查找指定位置之后的插入指定位置的删除销毁关于链表的分类根据链表的三大特性,单向or双向、带头or不带头、循环or不循环,可将链表分为2*2*2,8种链表,前面我们已经实现了单链表,即:不带头......
  • 【数据结构初阶】一篇文章带你超深度理解【单链表】
     hi!目录前言:1、链表的概念和结构2、单链表(SingleList,简写SList)的实现2.1  定义链表(结点)的结构2.2 创建一个链表2.3 打印链表2.4 尾插2.5 头插2.6 尾删2.7 头删2.8 查找2.9 在指定位置之前插入数据2.10 在指定位置之后插入数据2.11......
  • 【数据结构】树和二叉树
    目录1.前言2.树2.1树的概念2.2树中的重要概念2.3树的表示形式 2.4树的应用3.二叉树3.1概念3.2两种特殊的二叉树3.3二叉树的性质3.4二叉树的存储3.5二叉树的遍历方式3.5.1创建二叉树3.5.2二叉树的遍历3.6二叉树的基本操作4.总结1.前言二叉树是数据结构中......
  • 数据结构与算法,剑指Offer 50题
    队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。对列的添加insertappend队列的取值列表[-1]列表[0]队列的删......
  • 最全数据结构个人笔记【单向链表】
    1.链表基本概念链式存储的线性表,简称链表链表其实是由一个或者多个结构体通过指针指向的关系构成我们把每个结构体的变量称为节点,节点里面由两个成员组成一个是数据域,另外一个是指针域,指针域是用于存放下一个节点的地址以此类推,我们把这种存储方式称为链式存储2.链......
  • PART1-Oracle关系数据结构-索引和索引组织表
    3.索引组织表3.1.索引概述索引是与表或表簇关联的可选结构,有时可以加快数据访问速度。通过在表的一个或多个列上创建索引,在某些情况下,您可以从表中检索一小部分随机分布的行。索引是减少磁盘I/O的众多方法之一。如果堆组织表没有索引,那么数据库必须执行全表扫描才能找到一个......
  • 数据结构(Java):Map集合&Set集合&哈希表
    目录1、介绍1.1 Map和Set1.2模型2、Map集合2.1Map集合说明2.2 Map.Entry<K,V>2.3Map常用方法2.4Map注意事项及实现类 3、Set集合3.1Set集合说明 3.2 Set常用方法 3.3Set注意事项及其实现类4、TreeMap&TreeSet4.1集合类TreeMap(Key-Value模型)4.1.1底......
  • 【数据结构】:用Java实现链表
    在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此:java集合中又引入了LinkedList,即链表结构。概念顺序表是物理上连续,逻辑上也是连续的链表......
  • 【数据结构】队列详解和模拟实现
    大家好,今天我们学习队列,本篇博客主要涉及一般队列,环形队列和双端队列,每个队列应用场景均有所差异,下面我们一起来看看吧。队列(Queue)一,概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性入队列:进行插入操作的一端称为队尾(Ta......