栈和队列考点

栈(stack ;a pile of things)
只能在一端插入删除;
“先进先出”“操作受限的线性表”
初始化(顺序存储):
int stack[MAXSIZE];
int top = -1;

入栈:stack[++top] = e;
出栈:stack[top–] =e;

栈空:top == -1;
栈满:top == MAXSIZE - 1;

链栈:
初始化:
LNode* head = (LNode*)malloc(sizeof(LNode));
head->next = NULL;
LNode* top = NULL;
入栈:
top = (LNode*)malloc(sizeof(LNode));//top始终指向新插入的节点;
top->next = NULL;
top->data = ‘A’;
top->next = head ->next;//头插法;
head->next = top;
出栈:
x = top->data;
head->next = top->next;
free(top);
top = head->next;

栈满:
考研中没有栈满;(内存无限大);
占空:
head->next == NULL;

队列(the queue)
定义:只能在一端插入,另一端删除;(先进先出的逻辑特性)
顺序队:
int queue[MAXSIZE];
int front=0, rear=0;

入队:
queue[++rear] = e;
出队:
x = queue[++front];(元素残留在队列中)
……假溢出;
环状队列
入队:rear = (rear+1)%MAXSIZE;
queue[rear]=x;
出队:front = (front+1)%MAXSIZE;
x = queue[front];

队空:
front = rear;
队满:
front = (rear+1)%MAXSIZE;

链队:
初始化:
入队:
出队:

考点(非代码)
考点1:由出栈序列判断栈容量;(选择题)
结论:若入:1,2, 3则无3,1,2;
卡特兰数(catalan number):
Cn = (2n)!/[(n+1)!n!] = 输出序列的个数(n为入栈元素个数)
考点2:表达式转换
中前后缀表达式:a+b/+ab/ab+
要会互相转换
二叉树转换法
括号转换法
考点3:栈用于求前中后缀表达式的值;

考点4:队列的配置问题
1:计算元素的个数
(rear-front+MAXSIZE)%MAXSIZE = NUM;

非正常配置问题
第一种:front指向第一个元素
rear指向最后一个元素的后一位;
1:计算个数公式一样,只是入队出队次序不同;

第二种:front指向第一个元素,rear指向最后一个元素;
队空:front = (rear+1)%MAXSIZE;
队满:front = (rear+2)%MAXSIZE;
计算元素个数
=(rear-front+1+maxsize)%maxsize;

考点4:队列扩展—双端队列
输入/输出受限的双端队列;考入队出队的次序问题;

考点5:栈的扩展
共享栈:共享同一块存储单元;
实现: int stack[maxsize];
int top1 = -1; top2 = maxsize;
(int top[2] = {-1, maxsize};)//将两个指针存在数组里

栈满:top[0] +1 == top[1];

用栈来模拟队列:(两个同大小的栈)
入队规则:
**若s1不空,则元素直接入s1;
**若s1满,s2空,则将元素一次性移入s2;之后在入s1;
出队规则:
**若s2不空,则从s2直接出栈;
**若s2空,则将s1元素入s2,然后在从s2出栈;
队满:s1满且s2不空 ;
对空;s1空且s2空;

考点2(代码部分)
利用栈求后缀表达式的值:从左向右扫描,遇到运算符就运算
这里写图片描述

栈求前缀表达式:从右向左扫描,遇到运算符就计算
这里写图片描述

中缀表达式转后缀表达式
这里写图片描述
中缀表达式转前缀表达式
这里写图片描述

括号匹配问题!
这里写图片描述

栈的计算
这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值