當前位置:編程學習大全網 - 編程語言 - C語言編程:輸入壹位操作數的算術表達式,判斷左括號與右括號是否匹配,並計算

C語言編程:輸入壹位操作數的算術表達式,判斷左括號與右括號是否匹配,並計算

先按順序取出所有的括號.然後循環刪除_相鄰的_差為壹或二的_點.最後如果表空則匹配.

單向鏈表:

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

}

  • 上一篇:可視面板編程
  • 下一篇:數控車床中T什麽意思
  • copyright 2024編程學習大全網