C语言 括号是否匹配。
发布网友
发布时间:2022-05-08 03:51
我来回答
共4个回答
热心网友
时间:2023-11-25 05:22
先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配.
单向链表:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 80
typedef struct list{
char node;
struct list* next;
}list,*plist;
void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);
int main(int argc,char* argv[]){
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);
scanf("%80s",test);
for (i=0;i<LEN;i++){
switch(test[i]){
case '[': case']': case'{': case'}': case'(': case')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p)){
printf("括号匹配!\n");
}
else
printf("括号不配对!\n");
return 0;
}
void iniList(plist aplist){
aplist->next=NULL;
aplist->node='\0';
}
int isEmpty(plist aplist){
return aplist->next==NULL?1:0;
}
int listAppend(plist aplist,char a){
plist bplist=aplist,anode;
while (bplist->next){
bplist=bplist->next;
}
anode=(plist)malloc(sizeof(list));
if (!anode)exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}
int delBracketsFormList(plist aplist){
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;
while(has){
has=0;
temp=aplist;
while (temp->next){
if(temp->next->next){
if((temp->next->next->node - temp->next->node == 1)||(temp->next->next->node - temp->next->node == 2)){
temp->next = temp->next->next->next;
has=1;
}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)break;
}
}
return 0;
}
热心网友
时间:2023-11-25 05:23
先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配.
单向链表:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 80
typedef struct list{
char node;
struct list* next;
}list,*plist;
void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);
int main(int argc,char* argv[]){
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);
scanf("%80s",test);
for (i=0;i<LEN;i++){
switch(test[i]){
case '[': case']': case'{': case'}': case'(': case')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p)){
printf("括号匹配!\n");
}
else
printf("括号不配对!\n");
return 0;
}
void iniList(plist aplist){
aplist->next=NULL;
aplist->node='\0';
}
int isEmpty(plist aplist){
return aplist->next==NULL?1:0;
}
int listAppend(plist aplist,char a){
plist bplist=aplist,anode;
while (bplist->next){
bplist=bplist->next;
}
anode=(plist)malloc(sizeof(list));
if (!anode)exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}
int delBracketsFormList(plist aplist){
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;
while(has){
has=0;
temp=aplist;
while (temp->next){
if(temp->next->next){
if((temp->next->next->node - temp->next->node == 1)||(temp->next->next->node - temp->next->node == 2)){
temp->next = temp->next->next->next;
has=1;
}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)break;
}
}
return 0;
}
热心网友
时间:2023-11-25 05:23
呵呵,我们也要编这个程序,冒似是数据结构的题,我也不会做,过来看一哈子,嘿嘿
热心网友
时间:2023-11-25 05:23
呵呵,我们也要编这个程序,冒似是数据结构的题,我也不会做,过来看一哈子,嘿嘿
热心网友
时间:2023-11-25 05:24
我想是不是用栈做是不是更方便一些呢?
具体做法我就不做了,给个建议而已。判断是左括弧的就进栈,遇到右的直接出栈一个。判断最后栈是否为空。
热心网友
时间:2023-11-25 05:24
楼上(回答者:zhoube)高见,是否该用三个栈,分别匹配[]、()、{}?
热心网友
时间:2023-11-25 05:23
我想是不是用栈做是不是更方便一些呢?
具体做法我就不做了,给个建议而已。判断是左括弧的就进栈,遇到右的直接出栈一个。判断最后栈是否为空。
热心网友
时间:2023-11-25 05:24
楼上(回答者:zhoube)高见,是否该用三个栈,分别匹配[]、()、{}?