
#include
#include
#include
#define MaxSize 50 //定义栈中元素最大个数
typedef int ElemType;
bool Judge(char A[])
{
int i=0;
int j=0,k=0;
while(A[i]!=')'switch
{
([A]i)case{
'I' :++j;break;case
'O' :++k;break;}
if
()k>jreturn; false//出栈次数大于入栈次数违法++
i;}
if
(!=j)kreturn; false//非法else
return ; true}
int
main ()char
{
* [A50];gets
()A;// IOIIOIOO(OK) IIIOIOIO (NO) IOOIOIIO (NO)
printf
("当前输入是否合法? %d",Judge()A);return
0 ;}
#
[另解]
include#
include#
include#
defineMaxSize 50 //定义栈中元素最大个数 typedef
int ; ElemTypeJudge
bool (char[ A])int
{
= i0;int
= k0;while
([A]i!=')'switch(
{
[]A)icase'I'{
: ++;kbreak;case'O'
: --;kbreak;}if
(
<0k)return;//出栈次数大于入栈次数违法 false++;
i}if
(
!=0k)return;return false;
} trueint
main
( )char*
{
[ 50A];gets(
);A// IOIIOIOO(OK) IIIOIOIO (NO) IOOIOIIO (NO)printf
(
"当前输入是否合法? %d",Judge())A;return0
; }//字符串读入费劲,就不实现了
dc
第四题(利用栈判断链表是否中心对称)
(
bool ,intLinkList L)int n;
{
char i[
/ s2n];//字符栈*=
LNode ;pforL->next(
=0i;</i2n;++)i[]
{
s=i;=p->data;
p}p->next--
;
i//由于多++一次用于判断iif(
%2n==1)=;
p//中间有中心结点p->nextwhile(
!=NULLp&&[]s==i)--p->data;
{
i//出栈=;
p}p->nextif
(
==-i1)return;//关于中心对称 truereturn;
} false#
include
第五题(共享栈基本 *** 作)
#include
#include
#define
MaxSize50 //定义栈中元素最大个数 typedef int
; typedef ElemTypestruct
[ ]
{
ElemType data;MaxSize//存放栈中元素int[
2 top];//栈顶指针开两个};
//栈的初始化 SqStackvoid
InitStack
( *)SqStack [S0
{
S->top]=-1;//0号栈初始为空[1
S->top]=;//1号栈初始为空MaxSize}//判断栈是否为空
StackEmpty
(
bool *)SqStack ifS(
{
[1S->top]-[0S->top]==1)return;//相差一个元素时栈满 truereturn;
} false//入栈
Push
(
bool *,SqStack ,SintElemType x)if flag(
{
[1S->top]-[0S->top]==1)return;//栈满 falseif(
==0flag)[++
{
S->data[0S->top]]=;//从左向右添加元素,数组下标++x}else
[
--
{
S->data[1S->top]]=;//从右向左添加元素,数组下标--x}return
;
} true//出栈
Pop
(
bool *,SqStack *S,ElemType intx)if flag(
{
(==0flag&&[0S->top]==-1)||(==1flag&&[1S->top]==))MaxSizereturn;//栈为空 falseif(
==0flag)*=
{
[x[S->data0S->top]--];//top0向左移动,出栈}else
*
=
{
[x[S->data1S->top]++];//top1向右移动,出栈}return
;
} true//获取栈顶元素
GetTop
(
bool *,SqStack *S,ElemType intx)if flag(
{
(==0flag&&[0S->top]==-1)||(==1flag&&[1S->top]==))MaxSizereturn;//栈为空 false*=
[x[S->data]S->top]flag;return;
} true//打印栈
void
PrintStack
( *,SqStack intS)int flag;
{
if i(
==0flag)=0
{
i;printf(
"打印%d号栈\n",);flagwhile(
<=[i0S->top])printf(
{
"%d ",[++S->data]i);}}
else
=
[
{
i1S->top];printf(
"打印%d号栈\n",);flagwhile(
<=-i1MaxSize)printf(
{
"%d ",[++S->data]i);}}
printf
(
"\n");}int
main
( );InitStack
{
SqStack s(
&);s//初始化for(
int=1 i;<=10 i;++) iPush(
{
&,,s0i);//将1~~10放入0号栈中}for
(
int=40 i;<=50 i;++) iPush(
{
&,,s1i);//将40~~50放入1号栈中}printf
(
"将1~10入0号栈,40~50入1号栈\n");PrintStack(
&,0s);PrintStack(
&,1s);int*
; intt0*
; printft1(
"1号栈pop出一个元素\n");Pop(
&,,s1t1);//出1号栈一个元素PrintStack(
&,1s);return0
; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)