近期学习总结2019/5/8

最近感觉时间过得好快,还没做什么,就又是三天过去了。这三天做题方面,二分还能稍微好一点,虽然还是不能很好的把实际问题转化成二分的方法,但也做出来了几道题,也还算是有思路。不过单调队列到现在也没有做出来一道题,还是要加强关于这方面的学习和练习。
上一节课学了数据结构,这里简单总结一下


栈是只能在某一端插入和删除的特殊线性表, 也称为后进先出表(LIFO表)。
一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP<0时为下溢。栈指针在运算中永远指向栈顶
在这里插入图片描述

进栈(PUSH)退栈的(POP)算法:

#define n 100
void push(int s[],int *top,int *x)  //入栈
{
   if (*top==n) printf("overflow"); 
     else { (*top)++; s[*top]=*x; }
}
void pop(int s[],int *y,int *top)   //出栈
{
   if (*top==0)  printf("underflow");  
     else { *y=s[*top]; (*top)--; }
}

队列
队列是限定在一端进行插入,另一端进行删除特殊线性表。 由于总是先入队的元素先出队(先排队的人先买完东西),这种表也称为先进先出(FIFO)表。
队列可以用数组Q[m+1]来存储,数组的上界m即是队列所容许的最大容量。在队列的运算中需设两个指针:
head:队头指针,指向实际队头元素的前一个位置
tail:队尾指针,指向实际队尾元素所在的位置
队列很容易出现假溢出,即tail已达上界,但队列不满。克服假溢出的方法有两种。一种是将队列中的所有元素均向低地址区移动,显然这种方法是很浪费时间的;另一种方法是将数组存储区看成是一个首尾相接的环形区域。当存放到n地址后,下一个地址就"翻转"为1。在结构上采用这种技巧来存储的队列称为循环队列
如图:
在这里插入图片描述
循环队的入队算法如下:

1、tail=tail+1;
2、若tail=n+1,则tail=1;
3、若head=tail尾指针与头指针重合了,表示元素已装满队列, 则作上溢出错处理;
4、否则,Q[tail]=x,结束(x为新入出元素)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值