总结20211215(栈和队列)

今天没打金刚功,也没有晚自习,学校因为疫情又封了,这个星期先把任务完成,下周开始得准备一下期末考试了,大概率要挂几门科,把时间都花在专业上了。

写一下出栈的合理性。

例如n是5,那么入栈次序就是1,2,3,4,5,如果我们希望出栈次序同样是1,2,3,4,5,那只要每push一个数,就立即pop一个数。如果我们希望出栈次序是3,2,4,5,1,那么我们先让1,2,3入栈,然后pop出来3和2,接着4入栈后马上pop,再就是5入栈后马上pop,最后再把栈里的1pop出。再例如,如果我们希望出栈次序是5,4,1,2,3,这是办不到的,如果要让5最先出栈,那么出栈次序只可能是5,4,3,2,1。

所以假设我们要判断a,b,c,d......是否出栈合理,先要把1到a的数存在数组里,将栈顶也就是a从数组中删除,再来判断b,如果b小于a,那么显然b只能等于a-1,否则直接判断错误。如果b大于a,再来将a+1到b的数给数组,将栈顶也就是b从数组中删除。以此类推。所以从第二个数开始只要遇到比前面小的数就看是否等于栈顶,遇到比前面大的数就存数给数组。每次处理一个数时数组应该都会变。这里的数组其实就是栈。假设我将要判断的n个数赋值给数组a,判断的代码为:

for(i=1;i<=n;i++)  
{  
	for(j=max+1;j<=a[i];j++)  
	 { 
	    max=j;  
		stack[top++]=j; 
		if(top>n){
		printf("No\n");
             goto out;
                 }
     }  
	if(stack[--top]!=a[i]){
		printf("No\n"); 
             goto out;
                    }
						
}  
	    printf("Yes\n"); 
out:		

链表还没动,明天开始写吧。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值