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