首页 > 其他分享 >考研数据结构-栈

考研数据结构-栈

时间:2024-10-21 23:18:02浏览次数:7  
标签:LNode int top st next lst 数据结构 考研

(一)、栈的基本概念

         栈是一种只能在一端进行插入或者删除操作的线性表。允许插入或者删除的一端称为栈顶。栈顶由一个称为栈顶指针的位置指示器(是一个变量,对于顺序栈,就是记录栈顶元素所在数组位置符号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和删除操作一般称为入栈和出栈。

        栈的主要特点是先进后出(FILO)。先进入栈的元素后出来,最后进入栈的元素先出来。

        栈的存储结构分为——顺序表和链表来表示,也就是分为顺序栈和链式栈。栈是一种在操作上稍加限制的线性表,即栈的本质上是线性表。

(二)、栈的存储结构、算法      

           顺序栈的定义

typedef struct SqStack
{
    /* data */
    int data[maxSize]; // 存放栈中的元素,MaxSize已经定义
    int top;    //栈顶指针
}SqStack;

        链栈的定义

/*链栈结点定义*/
typedef struct LNode
{
    /* data */
    int data; //数据域
    struct LNode *next;
}LNode;

        顺序栈

        对于顺序栈st,一共包含4个要素,包含两个特殊状态和两个操作。两个状态分别为:栈空状态。st.top==-1。栈满状态。st.top==maxSize-1;两种操作分别为:元素x进栈操作:++(st.top);st.data[st.top]=x。元素x出栈操作:x=st.data[st.top];--(st.top)。

        初始化栈的代码

void initStack(SqStack *st)
{
    st->top = -1; // 只需要将栈顶指针设为-1
}

        判断栈中代码

/*判断栈空代码,栈st空时返回1,否则返回0*/
int isEmpty(SqStack st)
{
    if (st.top == -1)
    {
        /* code */
        return 1;
    }else{
        return 0;
    }
}

        进栈代码

/*进栈代码*/
int push(SqStack *st,int x)
{
    if (st->top == maxSize - 1) // 栈满
    {
        /* code */
        return 0;
    }

    st->top = st->top + 1;
    st->data[st->top] = x;
    return 1;
    
}

        出栈代码

int pop(SqStack *st,int *x)
{
    if(st->top == -1)
        {
            return 0;
        }

    x = st->data[st->top];
    st->top = st->top - 1;
    return 1;
}

        高效的代码书写

/*栈的定义*/
int stack[maxSize];int top = -1;
/*元素x进栈*/
stack[++top]=x;
/*元素x出栈*/
x=stack[top--];

        链栈

        和顺序栈对应,链栈也有4个要素,包含两个特殊状态和两个操作。

        链栈的初始化代码

void initStack(LNode *lst)
{
    lst = (LNode*)malloc(sizeof(LNode*)); //制造一个头结点
    lst->next=NULL;
}

        判断栈空代码

/*判断栈空代码*/
int isEmpty(LNode *lst){

    if (lst->next == NULL)
    {
        /* code */
        return 1;
    }else{
        return 0;
    }
    
}

        进栈代码

/*进栈代码*/
void push(LNode *lst,int x){

    LNode *p;
    p = (LNode*)malloc(sizeof(LNode*)); //为进栈元素申请空间
    p->next = NULL;

    /*链表的头插表*/
    p->data = x;
    p->next = lst->next;
    lst->next = p;
}

        出栈代码

void pop(LNode *lst,int *x){ //需要改变的变量要用引用型
    LNode *p;
    if (lst->next == NULL) //若为空,则不能出栈
    {
        /* code */
        return 0;
    }

    p = lst->next;
    x = p->data;

    lst->next = p->next;
    free(p);
    return 1;
    
}

标签:LNode,int,top,st,next,lst,数据结构,考研
From: https://blog.csdn.net/weixin_61852944/article/details/143080853

相关文章

  • 数据结构-双向链表
    一概念与结构带头双向循环链表注意:这⾥的“带头”跟前⾯我们说的“头结点”是两个概念,带头链表⾥的头结点,实际为“哨兵位”,哨兵位结点不存储任何有效元素,只是站在这⾥“放哨的。如果,带头的链表中,只有头节点,我们就称该链表为空链表。二双向链表的实现创建一个新项目,并创......
  • 数据结构——队列
    目录1>>导言2>>队列的结构3>>初始化4>>打印5>>入列6>>出列6.1>>判断是否为空7>>取队头和队尾数据and统计个数8>>队列销毁9>>三个文件代码queue.hqueue.ctest.c10>>总结1>>导言    在把栈学习完后,步入新的章节——队列,队列是一种特殊的线性表,队列是......
  • 【数据结构】动态规划:揭开算法优化的秘密
    在算法世界中,动态规划(DynamicProgramming,DP)无疑是一个充满魅力的思想,特别是在解决复杂的优化问题时,它展现出了极大的威力。它不仅能优化问题的求解速度,还能通过减少重复计算来提高效率。然而,对于很多初学者来说,动态规划常常显得有些晦涩难懂。本文将通过浅显的例子,帮助你......
  • 新高一暑假第一期集训恢复性训练【数据结构-并查集】(补)
    新高一暑假第一期集训恢复性训练【数据结构-并查集】(补)C.[POJ1417]TrueLiars先将题目中的好人和坏人转换一下,也即是如果\(x\)说\(y\)是好人,则他们两属于同一组,反之则不属于同一组。然后我们可以想到带权的并查集,用\(val_x\)代表\(x\)与其父节点的关系,当\(val_x\)......
  • 数据结构_day5(完结)
    目录7.树7.1特性7.1.1什么是树7.1.2关于树的一些术语7.2二叉树7.2.1什么是二叉树7.2.2二叉树性质(重点)7.2.3满二叉树和完全二叉树7.2.4二叉树的存储结构7.3二叉树的链式存储7.4层次遍历哈夫曼树Huffman图1.什么是图2.图的基本概念3.图的分类3.1......
  • 前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏
    一、开篇寄语:在准备考研复试的关键时期,许多学弟学妹们往往会寻求各种资料来辅助复习,市面上也因此涌现了大量的“考研复试全流程全攻略”。然而,这些攻略往往存在以下问题:1、内容不完整性遗漏关键信息:许多攻略在描述考研复试流程时,未能全面覆盖所有关键环节,导致考生可能忽视某......
  • 【趣学C语言和数据结构100例】
    【趣学C语言和数据结构100例】问题描述51.在一个递增有序的单链表中,存在重复的元素。设计算法删除重复的元素,例如(7.10.10.21.30.42.42.42.51.70)将变为(7.10.21.30.42.51.70)。52.设A和B是两个单链表(带头结点),其中元素递增有序。设计一个算法从A和B中的公共元素产......
  • 408数据结构-折半查找,分块查找 自学知识点整理
    前置知识:查找的基本概念折半查找折半查找又称二分查找,它仅适用于有序的顺序表。因个人习惯,下文均用二分代替折半。二分查找的基本思想:首先将给定值ke......
  • springboot+vue鞍师考研交流网站【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业竞争的加剧,越来越多的本科生选择继续深造,考研成为了他们提升学历、增强竞争力的重要途径。鞍山师范学院作为一所知名的教育机构,每年都有大量的学生投入到考研大军中。然而,考研过程中的信息获取、资料查找、经......
  • 【数据结构】队列
    ......