栈的练习题

1 写一个算法,判断所给的操作序列是否合法(判断给定栈的出栈和入栈)是否合法,合法返回true,不合法返回false

bool Stack(&S){//错误代码,我的想法是用栈来进行,从栈的实际
    while(S!=NULL){//退出循环不对(我不知道如何退出循环)
        char a;
        char b =scanf("%c"a);
        if(b=='I'){
            push(S,b);
        }
        if(b=='O'){
            pop(S,b);
        }
    
    }
        if(S==NULL){
            return true;
        }
        else{
            return false;
    }
}
bool Judge(char A[]){
    int i=0,cnt=0;
    for(;A[i]!='\0';i++){
        if(A[i]=='I'){
            cnt++;
        }
        if(A[i]=='O'){
            cnt--;
        }
        if(cnt<0){
            printf("该序列不合法");
        }
    }
    if(cnt!=0){
        printf("该序列不合法");
        return false;
    }
    if(cnt==0){
        printf("该序列不合法"); 
    }


}

2单链表的表头指针为L,结点结构是由data和next两个域构成,其中data域为字符型。判断该链表的n个字符是否中心对称

//中心对称考虑奇数和偶数,假设该题给出链表L(链表里面已经包含了n个字符)
bool judge(SqList &L){
LinkNode q =malloc(*LinkNode)(sizeof(LinkNode));
q=L;
    if(n%2==0){//偶数
        for(int i=0;i<n/2;i++){
                                      //LinkNode q =malloc(*LinkNode)(sizeof(LinkNode));
            q=q->next;   
        }
        p=q->next;
        q->next=NULL;
    }

    while((n/2)--){
        if(p==q){
            p=p->next;
            q=q->next;
        }
        else{
            return false;
        }
    
    }



}
int dc (LinkList L,int n){
	int i,char s[n/2];
	p=L->next;
	for(i=0;i<n/2;i++){
		s[i]=p->data;
		p=p->next;
	}
	i--;
	if(i%2==0){
		p=p->next;
	}
	while(p!=NULL&&s[i]==p->data){
		i--;
		p=p->next;
	}
	if(i==-1){
		return 1;//表示空栈
	}
	else{
		return 0;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值