王道数据结构代码3.1.5(栈)

第三题(入栈出栈序列的合法性)

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50  //定义栈中元素最大个数

typedef int ElemType;

bool Judge(char A[])
{
    int i=0;
    int j=0,k=0;
    while(A[i]!='\0')
    {
        switch(A[i]){
           case 'I':j++;break;
           case 'O':k++;break;
        }
        if(k>j)return false;//出栈次数大于入栈次数违法
        i++;
    }
    if(j!=k)return false;//非法
    else return true;
}


int main()
{

    char *A[50];
    gets(A);
    // IOIIOIOO(OK)  IIIOIOIO (NO)  IOOIOIIO  (NO)
    printf("当前输入是否合法? %d",Judge(A));




    return 0;
}


第四题(利用栈判断链表是否中心对称)

//字符串读入费劲,就不实现了
bool dc(LinkList L,int n)
{
    int i;
    char s[n/2];//字符栈
    LNode *p=L->next;
    for(i=0;i<n/2;i++)
    {
        s[i]=p->data;
        p=p->next;
    }
    i--;//由于多++一次用于判断i<n/2
    if(n%2==1)
        p=p->next;//中间有中心结点
    
    while(p!=NULL&&s[i]==p->data)
    {
        i--;//出栈
        p=p->next;
    }
    if(i==-1)return true;//关于中心对称
    return false;
}

第五题(共享栈基本操作)

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50  //定义栈中元素最大个数

typedef int ElemType;

typedef struct
{
    ElemType data[MaxSize];//存放栈中元素
    int top[2];//栈顶指针开两个

} SqStack;

//栈的初始化
void  InitStack(SqStack *S)
{
    S->top[0]=-1;//0号栈初始为空
    S->top[1]=MaxSize;//1号栈初始为空

}

//判断栈是否为空
bool StackEmpty(SqStack *S)
{
    if(S->top[1]-S->top[0]==1)return true;//相差一个元素时栈满
    return false;
}

//入栈
bool Push(SqStack *S,ElemType x,int flag)
{
    if(S->top[1]-S->top[0]==1)return false;//栈满
    if(flag==0)
    {
        S->data[++S->top[0]]=x;//从左向右添加元素,数组下标++
    }
    else
    {
        S->data[--S->top[1]]=x;//从右向左添加元素,数组下标--
    }
    return true;
}

//出栈
bool Pop(SqStack *S,ElemType *x,int flag)
{
    if((flag==0&&S->top[0]==-1)||(flag==1&&S->top[1]==MaxSize))return false;//栈为空

    if(flag==0)
    {
        *x=S->data[S->top[0]--];//top0向左移动,出栈
    }
    else
    {
        *x=S->data[S->top[1]++];//top1向右移动,出栈
    }
    return true;
}

//获取栈顶元素
bool GetTop(SqStack *S,ElemType *x,int flag)
{
    if((flag==0&&S->top[0]==-1)||(flag==1&&S->top[1]==MaxSize))return false;//栈为空
    *x=S->data[S->top[flag]];
    return true;
}

//打印栈
void PrintStack(SqStack *S,int flag)
{
    int i;
    if(flag==0)
    {
        i=0;
        printf("打印%d号栈\n",flag);
        while(i<=S->top[0])
        {
            printf("%d ",S->data[i++]);
        }
    }
    else
    {
        i=S->top[1];
        printf("打印%d号栈\n",flag);
        while(i<=MaxSize-1)
        {
            printf("%d ",S->data[i++]);
        }
    }
    printf("\n");
}

int main()
{

    SqStack s;
    InitStack(&s);//初始化

    for(int i=1; i<=10; i++)
    {
        Push(&s,i,0);//将1~~10放入0号栈中
    }

    for(int i=40; i<=50; i++)
    {
        Push(&s,i,1);//将40~~50放入1号栈中
    }

    printf("将1~10入0号栈,40~50入1号栈\n");
    PrintStack(&s,0);
    PrintStack(&s,1);
    int *t0;
    int *t1;
    printf("1号栈pop出一个元素\n");
    Pop(&s,t1,1);//出1号栈一个元素
    PrintStack(&s,1);






    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDP 3.1.5是Hortonworks Data Platform(Hortonworks数据平台)的一个版本,Ubuntu是一个流行的开源操作系统,而Ambari 2.7.5是一个用于管理Hadoop集群的开源工具。 HDP 3.1.5是Hortonworks为大数据分析和处理提供的软件套件。它包括了一系列的开源组件,如Hadoop、Hive、HBase、Spark和Kafka等,可以用于存储和分析大规模数据。HDP 3.1.5版本带来了许多新功能和改进,提高了数据处理性能、安全性和可靠性。 Ubuntu是一个流行的开源操作系统,特点是易用性和稳定性。它支持HDP 3.1.5,并提供了包管理工具,方便用户安装和管理HDP的软件包。 Ambari 2.7.5是一个开源的集群管理工具,用于配置、监控和管理Hadoop集群。它提供了一个直观的Web界面,方便用户进行集群的配置和管理。Ambari 2.7.5版本为用户带来了更加稳定和高效的集群管理功能,并修复了一些bug。 结合使用HDP 3.1.5、Ubuntu和Ambari 2.7.5,用户可以方便地部署、配置和管理Hadoop集群。通过Ambari的直观界面,用户可以轻松监控集群的状态,并进行必要的配置和调整。Ubuntu作为操作系统,为HDP和Ambari提供了高度稳定和可靠的平台,确保集群正常运行。 总而言之,HDP 3.1.5提供了丰富的大数据处理工具,Ubuntu作为操作系统提供了稳定的平台,而Ambari 2.7.5则提供了集群管理的功能,使用户能够更方便地部署、配置和管理Hadoop集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值