首页 > 其他分享 >2023.09.21

2023.09.21

时间:2023-09-21 23:35:54浏览次数:32  
标签:2023.09 return 21 int ElemType top 元素 栈顶

    今天学习了数据结构栈和队列。

采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置。
若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize。当栈存在一个元素时,top等于0,因此通常把空栈的判断条件定位top等于-1。

#define MAXSIZE 50  //定义栈中元素的最大个数
typedef int ElemType;   //ElemType的类型根据实际情况而定,这里假定为int
typedef struct{
    ElemType data[MAXSIZE];
    int top;    //用于栈顶指针
}SqStack;

 

判断栈为空

bool StackEmpty(SqStack S){
    if(S.top == -1){    
        return true;    //栈空
    }else{  
        return false;   //不空
    }
}

进栈

/*插入元素e为新的栈顶元素*/
Status Push(SqStack *S, ElemType e){
    //满栈
    if(S->top == MAXSIZE-1){
        return ERROR;
    }
    S->top++;   //栈顶指针增加一
    S->data[S->top] = e;    //将新插入元素赋值给栈顶空间
    return OK;
}

共享栈(两栈共享空间)
(1)共享栈概念
利用栈底位置相对不变的特征,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

两个栈的栈顶指针都指向栈顶元素,top0=-1时0号栈为空,top1=MaxSize时1号栈为空;仅当两个栈顶指针相邻(top0+1=top1)时,判断为栈满。当0号栈进栈时top0先加1再赋值,1号栈进栈时top1先减一再赋值出栈时则刚好相反。

/*两栈共享空间结构*/
#define MAXSIZE 50  //定义栈中元素的最大个数
typedef int ElemType;   //ElemType的类型根据实际情况而定,这里假定为int
/*两栈共享空间结构*/
typedef struct{
    ElemType data[MAXSIZE];
    int top0;    //栈0栈顶指针
    int top1;    //栈1栈顶指针
}SqDoubleStack;

 

三、栈的链式存储结构

采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。这里规定链栈没有头节点,Lhead指向栈顶元素,如下图所示。

进栈:

/*插入元素e为新的栈顶元素*/
Status Push(LinkStack *S, ElemType e){
LinkStackPrt p = (LinkStackPrt)malloc(sizeof(StackNode));
p->data = e;
p->next = S->top; //把当前的栈顶元素赋值给新节点的直接后继
S->top = p; //将新的结点S赋值给栈顶指针
S->count++;
return OK;
}

出栈:

/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop(LinkStack *S, ElemType *e){
LinkStackPtr p;
if(StackEmpty(*S)){
return ERROR;
}
*e = S->top->data;
p = S->top; //将栈顶结点赋值给p
S->top = S->top->next; //使得栈顶指针下移一位,指向后一结点
free(p); //释放结点p
S->count--;
return OK;
}

标签:2023.09,return,21,int,ElemType,top,元素,栈顶
From: https://www.cnblogs.com/dmx-03/p/17721241.html

相关文章

  • 9月21日总结
    一.今天做了什么今天上午学了统一建模语言,然后上体育课,测了体前屈、跳远、50米跑和引体向上,所幸基本及格下午学习数据结构给我听蒙了,然后上离散课,老师讲的飞快,嘴一直突突都不听。晚上趁着选修课又学了一下二.遇到的问题,如何解决无三.明天准备做什么明天准备摆烂......
  • Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执
    Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执行--(CVE-2022-23221)环境概述采用Vulfocus靶场环境进行复现,搭建操作和文章参考具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败。CouchdbCVE-2017-12635权限绕过漏洞概述A......
  • 9.21 uml感悟
    对uml有了一些全新的认知,之前感觉这课奇奇怪怪的今天课下又往后面翻了翻,书中讲了很多项目的思路结构其实说,真正写出一个程序,感觉离不开的就有计算机语言的语法基础,程序的大体思路,基本结构当然还有一些减时减力的特殊算法至于uml的统一建模语言,这个“统一”和“建模”......
  • 2023-9-21 闲话
    鲜花还是在博客园写吧。感觉挺累的,想病个两三天回家睡觉。推歌:竹ノ花原曲之一是《东方求闻史记》的附赠曲,同样改编了本曲的二创还有《现梦-genmu-》都是挺让人伤感的歌曲呢,这首歌是凋叶棕为同名本子做的曲,讲的是稗田三代家主与男主的故事。稗田家的家主30岁必死,然后转生,......
  • 2023.9.21
    SpringBoot提供了多个常用的注解,用于在应用程序的各个组件(类、方法、字段等)上添加元数据,以实现不同的功能。以下是一些常用的SpringBoot注解:1.@SpringBootApplication:主要用于启动类上,表示这是一个SpringBoot应用程序的入口点。它组合了@Configuration、@EnableAutoConf......
  • The 2021 China Collegiate Programming Contest (Harbin) JBEID
    The2021ChinaCollegiateProgrammingContest(Harbin)JBEIDJ.LocalMinimum模拟题意:一个数当且仅当它是当前列最小值同时也是当且行的最小值它才算入贡献。思路:直接\(for\),预处理出每一行每一列的最小值,然后去\(check\)每一个数。//AConemoretimes//nndbk#inc......
  • 20230921-python的get请求和post请求区别
    1.。get请求  2。post请求   ......
  • 9.21日
    一、上午学了统一语言的用例图,然后学了它的基本特征还有绘图特点和方法。二、体测,再次突破了自己的极限,达到了网络大神的高度,1000米三分零九。三、下午学了数据结构的栈,还有应用,栈的入栈,出栈。学了离散数学的运算性质,还有复合关系。四、晚上写作业,数据结构和离散数学。......
  • 【枚举】【贪心技巧】【集训队互测2021】子集匹配
    题目描述给定\(n,k(2k\geqn)\),二进制中有\(k\)个\(1\)的不超过\(n\)位的数有\(\binom{n}{k}\)个,有\(k-1\)个\(1\)的有\(\binomn{k-1}\)个,后者显然大于等于前者,要求对于每一个\(k\)个\(1\)的数\(x\),都找出一个\(k-1\)位的数\(y\)与之对应,且\(x......
  • 9.21
                    前两天表哥结婚没有更新看到表哥结婚时激动落泪 我也没有忍住,这个陪伴我整个童年的家伙昨天终于找到了自己的一生所爱。不知不觉我们都长大了....   ......