03、栈和队列
创始人
2025-06-01 20:49:12
0

03、栈和队列

1、栈的基本概念

逻辑结构:

操作受限的线性表:只允许在一端进行增加和删除的线性表。

特点:先进后出

卡特兰数:

image-20230321211226440

2、顺序栈的实现

定义:

typedef struct{int data[Maxsize];int top;
}Stack;

top是指向栈顶元素

进栈和出栈操作:

bool Push(SqStack *s,int x){if(s->top == -1){return false;}if(s->top >= Maxsize-1){return false;}s->top++;s->data[s->top] = x;return true;
} bool Pop(SqStack *s,int *x){if(s->top == -1){return false;}*x = s->data[s->top];s->top--;return true;
}

共享栈:

image-20230321222146735

销毁时内存自动回收

3、链栈

和线性表当中的链表一样,只是进栈和出栈操作都是对头结点进行后插和后删操作一样。

//带头结点初始化
bool InitLink(LinkList *p){*p = (LNode*)malloc(sizeof(LNode));(*p)->next = NULL;return true; 
} 
//不带头结点初始化
bool InitnLink(LinkList *p){*p = NULL;return true; 
} 
//带头结点进栈 
bool PushLink(LinkList *p,int i){LNode * s = (LNode*)malloc(sizeof(LNode));s->data = i;s->next = (*p)->next;(*p)->next = s;return true;
}
//不带头结点进栈 
bool PushnLink(LinkList *p,int i){LNode * s = (LNode*)malloc(sizeof(LNode));s->data = i;s->next = *p;*p = s;return true;
}bool PopLinke(LinkList *p,int *i){LNode *s = (*p)->next;if(s == NULL){return false;}*i = s->data;(*p)->next = s->next;free(s);return true;
}
bool PopnLinke(LinkList *p,int *i){LNode *s = *p;if(s == NULL){return false;}*i = s->data;(*p) = s->next;free(s);return true;
}

4、队列

定义:操作受限的线性表

队尾输入,对头输出

先进先出的特点

1、顺序队列实现

//初始化队列操作,rear指向下一个可以存放的地址
bool InitSqQueue(SqQueue *s){s->front = 0;s->rear = 0;return true;
} 
//判断是否为空
bool EmptySqQueue(SqQueue s){if(s->front == s->rear){return true;}else{return false;}
} 
//入队
bool EnSqQueue(a *s,int i){if((s->rear + 1) % Maxsize == s->front){return false;}s->data[s->rear] = i;s->rear = (s->rear + 1) % Maxsize;return true;
} 
//出队
bool DeSqQueue(SqQueue *s,int *i){if(s->front == s->rear){return false;} i = s->data[s->front];s->front = (s->front + 1) % Maxsize;return true;
} 

2、队列链式实现

3、双端队列

5、括号匹配问题

思路:

如果是左括号,压入栈中。

如果是右括号,判断栈是否非空。

弹出栈顶元素,检查是否匹配。

最后结束的时候,判断栈是否非空。

bool bracketCheck(char str[],int length){int i;char x;LinkList L;InitLink(&L);for(i = 0;i < length;i++){if(str[i] == '(' || str[i] == '[' || str[i] == '{'){PushLink(&L,str[i]);}else{if(LinkeEmpty(L)){return false;}PopLinke(&L,&x);if(str[i] == ')' && x != '('){return false;}if(str[i] == ']' && x != '['){return false;}if(str[i] == '}' && x != '{'){return false;}}}return LinkeEmpty(L);
} 

6、表达式求值

中缀表达式为常规的表达式

后缀和前缀表达式是为了取消括号界限符,无歧义地表达运算规律

后缀&前缀表达式计算

后缀表达式手算的过程中

1、确定运算符生效顺序

2、确定运算符按照 :左操作数 、右操作数、操作符的顺序组合成新的操作数

3、如果有剩余的数据继续2的操作

左优先:只要有同级别的运算符,先运算左边的

后缀表达式手算:

从左往右扫描,数字则入栈,遇到运算符则弹出2个元素,先出栈的为右操作数,运算之后再压入栈中。

前缀表达式:

遵循右优先原则,从右往左扫描,遇到数字压栈,先弹出栈顶的是左操作数,运算之后压入栈中。

中缀转后缀表达式

  1. 定义一个栈用于存放操作符
  2. 如果空栈,直接将操作符压栈
  3. 如果再次遇到操作符
    1. 如果是左括号,直接压入栈
    2. 如果是右括号,一直出栈直到遇到左括号
    3. 如果是操作数,会弹出优先级等于或大于的运算符并且压入栈

计算中缀表达式

1、定义操作符栈(用于转换成后缀表达式)、操作数栈(用于计算后缀表达式)

1、扫描操作数,压入操作数栈。如果遇到操作符则压入栈,如果期间弹出栈,则弹出操作数栈并进行计算后重新压入栈。

7、递归函数栈

使用栈来存储递归函数的临时变量和语句,可能重复计算,增加空间复杂度

8、队列的应用

树的层序遍历、图的广度优先遍历

多线程先来先服务,就绪进程队列。

相关内容

热门资讯

最新或2023(历届)关于一二...   最新或2023(历届)12月9日是纪念一二九爱国运动的八十周年,下面是小编给大家整理的关于一二九...
最新或2023(历届)感恩节黑...  每年11月的第四个星期四是美国传统的感恩节。在美国人的心目中,感恩节的重要性仅次于圣诞节。这是一个...
最新或2023(历届)感恩节黑...   下个星期四就是感恩节了,大家都准备好感恩节的黑板报资料了吗?一起来参考下小编给大家整理的具体内容...
最新或2023(历届)中小学纪...  一二九运动是指1935年12月9日发生在北平的一次伟大的抗日救亡运动。最新或2023(历届)的一二...
最新或2023(历届)班级纪念...  中国共产党领导的一次学生爱国运动。1935年12月9日,北平(今北京)学生数千人在中国共产党领导下...
最新或2023(历届)感恩节黑...   感恩节是美国国定假日中最地道、最美国式的节日,而且它和早期美国历史最为密切相关。感恩节就在每年1...
最新或2023(历届)感恩节黑...   每年11月的第四个星期四为感恩节(英语:Thanksgiving Day)。这是美国Day)。这...
最新或2023(历届)漂亮感恩...   感恩节(Thanksgiving Day)是美国人民独创的一个古老节日,也是美国人合家欢聚的节日...
最新或2023(历届)感恩节中...   感恩节(Thanksgiving Day)是美国人民独创的一个古老节日,也是美国人合家欢聚的节日...
最新或2023(历届)最新感恩... 11月的第四个星期四是感恩节。感恩节是美国人民独创的一个古老节日,也是美国人合家欢聚的节日,因此美国...
最新或2023(历届)全国法制...   最新或2023(历届)全国法制宣传日是最新或2023(历届)12月4日 星期五,关于法制宣传日的...
最新或2023(历届)法制宣传... 中共中央、国务院于2001年4月26日转发的《中央宣传部、司法部关于在公民中开展法制宣传教育的第四个...
最新或2023(历届)小学生感...   本周四就是感恩节了,小编精心给大家整理了关于感恩节的黑板报内容:感恩节的小故事,希望对同学们都有...
最新或2023(历届)感恩节的...   感恩节是美国国民首创的一个陈旧节日,也是美国人合家欢聚的节日,下面是关于感恩节的黑板报资料介绍,...
最新或2023(历届)全国法制...   最新或2023(历届)法制宣传日的主题是:大力弘扬法治精神,共筑伟大中国梦。下面是小编给大家整理...
国庆节主题儿童画图片素材大全,...   亲爱的朋友们,转眼又是这个熟悉的国庆节,我的祝福分分秒秒,我的关心时时刻刻,就在你的身边!愿我的...
最新或2023(历届)儿童画图...   最新或2023(历届)儿童画迎国庆-欢乐国庆节,神州大地繁花似锦,祖国长空乐曲如潮,欣望江山千里...
三年级国庆节儿童画图片素材大全...   三年级国庆节儿童画-祖国妈妈,国庆国庆,普天同庆。喜气喜气,增添福气。祖国妈妈的生日就要到了,这...
迎国庆儿童画图片素材大全,庆贺...   迎国庆儿童画-庆贺国庆节,锣鼓喧天,歌舞翩跹,国庆佳节,喜临人间;碧水含情,青山带笑,快乐好运,...
国庆节儿童画图片素材大全图片,...   小朋友们,你们喜欢国庆节吗?国庆节一到我们就放长假啦,我们就可以出去玩啦,你们说不好吗?是啊,国...