王道数据结构代码3.1.5

王道数据结构代码3.1.5,第1张

第三题(入栈出栈序列的合法性)
#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






    ; }




欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/921578.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存