C语⾔数据结构判断出栈序列合法性
具体思路看视频讲解把出栈序列看成是⼀个队列,
同时定义⼀个栈,每次压⼊⼀个元素到栈中,对⽐栈顶元素和队头元素是否相等,若相等则出栈当前元素并且出队出栈序列若当前栈顶元素不等于队列头元素,则持续压栈
具体讲解看视频讲解:
#include<stdio.h>
#include<stdbool.h>
bool check(int Popped[],int Pushed[])
{
int stack[5]={0},top=-1;//设置⼀个栈
int pop=0;//设置top1在popped中游⾛,popped表⽰弹栈的序列
for(int i=0;i<5;i++)//i在⼊栈序列之中游⾛
{
stack[++top]=Pushed[i];//压栈⼀个元素
while(top!=-1&&Popped[pop]==stack[top]){
--top;//若栈不为空且当前栈顶等于出栈序列头的值,栈顶元素出栈
++pop;//出栈序列头元素出队
}
}
if(top==-1)
return true;
else
return false;
}
pushedint main(){
int pushed[5]={1,2,3,4,5};
int popped[5]={3,2,5,4,1};
bool is_true=check(popped, pushed);
printf("%d\n",is_true);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。