栈的练习题

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;inext;   
        }
        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;idata;
		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;
	}

你可能感兴趣的:(链表,c语言,数据结构)