害怕提交次数过多,然后不再跑代码,影响成绩,所以又重新创建了两个号来测这道题。
结果全都正确,但就是一直”WA",然后Debug了近5个小时才把"WA"改成“AC",没想到是错在了这里!!!:
char s[1000];
fgets(s,500,stdin);
char *ptrs=s;
while(*ptrs!='\n'){
//No!
while(*ptrs!='\0'){
//Yes!
有2种解法:
1.顺序栈
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct SeqList{
char s[1000];
int top;
}SeqList;
void PushStack(SeqList *pseq,char c){
pseq->top++;
pseq->s[pseq->top]=c;
}
void PopStack(SeqList *pseq){
pseq->top--;
}
int main(){
char s[1000];
fgets(s,500,stdin);
char *ptrs=s;
SeqList *seq;
seq->top=-1;
while(*ptrs!='\0'){
switch(*ptrs){
case '(':
case '[':
case '{':
PushStack(seq,*ptrs);
break;
case ')':
case ']':
case '}':
if(seq->top==-1){
printf("no");
return 0;
}
else if(((*ptrs)==')')&&(seq->s[seq->top]=='(')){
PopStack(seq);
break;
}
else if((*ptrs==']')&&(seq->s[seq->top]=='[')){
PopStack(seq);
break;
}
else if((*ptrs=='}')&&(seq->s[seq->top]=='{')){
PopStack(seq);
break;
}
else{
printf("no");
return 0;
}
}
ptrs++;
}
if(seq->top=-1){
printf("yes");
}
else{
printf("no");
}
return 0;
}
2.链表栈
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct NODE{
char c;
struct NODE* next;
}NODE;
typedef struct LinkStack{
struct NODE* top;
}LinkStack;
void PushStack(LinkStack* plstack,char c1){
NODE* p=(NODE*)malloc(sizeof(NODE));
p->c=c1;
p->next=plstack->top;
plstack->top=p;
}
void PopStack(LinkStack* plstack){
NODE* temp=plstack->top;
plstack->top=(plstack->top)->next;
free(temp);
}
int main(){
char s[1000];
fgets(s,500,stdin);
char *ptrs=s;
LinkStack* plstack=(LinkStack*)malloc(sizeof(LinkStack));
plstack->top=NULL;
while(*ptrs!='\0'){
switch(*ptrs){
case '(':
case '[':
case '{':
PushStack(plstack,*ptrs);break;
case ')':
case ']':
case '}':
if(plstack->top==NULL){
printf("no");return 0;
}
else if(((*ptrs)==')')&&((plstack->top)->c=='(')){
PopStack(plstack);break;
}
else if(((*ptrs)==']')&&((plstack->top)->c=='[')){
PopStack(plstack);break;
}
else if(((*ptrs)=='}')&&((plstack->top)->c=='{')){
PopStack(plstack);break;
}
else{
printf("no");return 0;
}
}
ptrs++;
}
if(plstack->top==NULL){
printf("yes");
}
else{
printf("no");
}
return 0;
}
视频解析:https://live.csdn.net/v/191617