C语言编程:输入一位操作数的算术表达式,判断左括号与右括号是否匹配,并计算

作者&投稿:善周 (若有异议请与网页底部的电邮联系)
设计一个判断表达式中左右括号是否配对的算法,采用()数据结构最佳。~

就是栈。配对,就是一个左括号,一个右括号。你从头扫描字符串,看见左括号就进栈,看见右括号就把里面的最外一个左括号出栈,这样就是一对。等扫描完的时候,看栈里面好有没有。如果没有,那就是配对的,要不就是不配对。

设计一个判别表达式中左、右括号是否配对出现的算法,采用栈数据结构最佳。
原因: 栈是一种具有记忆能力的线性表,存取规则是先进后出,判别时遇到一个左括号时就向栈插入左括号,遇到右括号就从栈中删除一个左括号,最后若栈中没有左括号就证明括号成对,所以采用栈最适合判断表达式中括号是否成对出现。

扩展资料:
限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈操作数据元素只有两种动作:
1、数据元素用栈的数据结构存储起来,称为“入栈”,也叫“压栈”。
2、数据元素由于某种原因需要从栈结构中提取出来,称为“出栈”,也叫“弹栈”。

先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配.
单向链表:

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

汗,这不是数据结构中堆栈的运用实例?
呵呵~~随便找本数据结构书,堆栈章节就有。

数据结构中的栈的应用


用c语言编程!要求输入1,输出A.输入26,输出Z。输入27输出AA.输入28输出...
\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){ char R[27]="ZABCDEFGHIJKLMNOPQRSTUVWXY",tmp[10]; int n,i,j; while(1){ printf("Input n(int n>0)...\\nn="); if(scanf("%d",&n) && n>0) break; pr...

用C语言编程 通过键盘输入一个小写字母,要求将其转化为对应的大写字母后...
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:0~31及127(共33个)是控制字符或通信专用字符(...

C语言:编程实现输入,输出
show(nums);printf("请输入一个数字(1~20):"),scanf("%d",&in);while(in<1 || in>20 || nums[in-1]==1){ if(in<1 || in>20)printf("输入错误!只能输入1~20的整数!...按任意键重新输入...\\n"),getch();else if(nums[in-1]==1)printf("输入错误!数字%d已输入,不能...

C语言编程题:任意输入一个数,使其在输出屏幕上显示出他是几位数,且显 ...
int number = 0;int nCount = 0;cin >> number;char string[25];memset(string, 0, 25);itoa(number, string, 10);for ( int i = 0; i < 25; i++ ){ if ( string[i] != '\\0' ){ cout << string[i]<< endl;nCoutn++;} else cout << nCount << endl;} ...

c语言编程 编写一程序,输入由一个‘0’,‘1’组成的字符序列,结束标志...
include<stdio.h> main(){ long sum =0;char i,a[100];printf("请输入0和1,以*结束:");scanf("%s",a);for(i=0;i<100;i++){ if(a[i]!='*')sum = sum*2 + a[i] - 48 ;else break;} printf("十进制为%d",sum);} 满意请采纳。

用二级c语言编程,在键盘上输入一个数,如果这个数的个位十位都是偶数...
scanf("%ld\\n",&ln); la = ln % 10L; lb = (ln \/ 10L) % 10L; if (0L == la % 2L && 0L == lb % 2L) { printf("yes\\n"); } else { printf("no\\n"); } return 0;}

急求c语言编程:从键盘输入一个整数,求它的位数,并打印出每一位上的...
include <malloc.h> int main (void){ int a, b, c, h, i, t, l;\/\/i是位数 char f;do { i = 0;printf("请输入一个数:");scanf("%d", &a);c = a;for (;a != 0; i++){ b = a\/10;a = b;} int * p = (int *)malloc(i*sizeof(int));for (h = 0;h ...

汇编语言 编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在...
AND AL,0F0H ;取高4 位 MOV CL,4 SHR AL,CL CMP AL,0AH ;是否是A 以上的数 JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL ;显示字符 MOV AH,02H INT 21H MOV AL,DS:[SI]AND AL,0FH ;取低4 位 CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL ;显示字符 MOV...

C语言编程任意输入一个9位的整数,可统计出奇数和偶数、零的个数并显示...
include<stdio.h> int main(){int x,n0,n1,n2,t;printf("请输入一个9位的整数:");scanf("%d",&x);for(n0=n1=n2=0;x;x\/=10){t=x%10;if(t==0)n0++;if(t&1)n1++;else n2++;} printf("其中有:\\n");if(n0)printf("%d个0\\n",n0);if(n1)printf("%d个奇数\\n",n1)...

C语言编程 输入一个字母,输出它的后继字母。如输入‘a’,则输出‘b...
int main(){ printf("请输入字母:");char a;scanf("%c",&a);if(!((a>='a' && a<='z')||(a>='A' && a<='Z')))printf("输入的不是字母!\\n");else if((a=='z') || (a=='Z'))printf("%c无后继字母\\n",a);else printf("%c的后继字母为%c\\n",a,a+1);s...

大荔县15011651778: C语言编程:输入一位操作数的算术表达式,判断左括号与右括号是否匹配,并计算 -
巧东艾本: 先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配. 单向链表: #include#include#include#define LEN 80 typedef struct list{ char node; struct list* next; }list,*plist; void iniList(plist); int isEmpty(plist); int ...

大荔县15011651778: 用C语言编写一个简单的计算器1 -
巧东艾本: #include<stdio.h> int main() {double num1 = 0; //输入1double num2 = 0; //输入2char ch; //操作double ret = 0; //结果 printf( "输入第一个数:" );scanf( "%lf", &num1 );printf( "输入第二个数:" );scanf( "%lf", &num2 ); ...

大荔县15011651778: 编写一个C语言程序 要求计算一位算术表达式的运算.急用,求大神,希望有讲解. -
巧东艾本: 四则运算吗?这个我有代码. /********本程序中在栈中多增加了一个top_temp指针,用来从栈底遍历栈********/ #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define INITSIZE 10 #define SIZE 100 #define OK 1; #define ERROR 0; ...

大荔县15011651778: C语言编写一个程序,从键盘上输入一个算术表达式,把计算的结果显示出来. -
巧东艾本: #includevoid main() { int a,b; //定义整数变量 char yun; //定义字符变量 printf("请输入运算符和要计算的两个数"); //向屏幕输出 scanf("%c%d%d",&yun,&a,&b); //接收用户输入的信息 switch(yun) { case '+':printf("%d+%d=%d",a,b,a+...

大荔县15011651778: 用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等功能.①要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2计... -
巧东艾本:[答案] #include#include#includeusing namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如:1+(-2)) { char data;...

大荔县15011651778: 急!!! 编写程序 输入一个整式算数表达式的输出结果 -
巧东艾本: #include"stdio.h" #include"math.h" main() { int x,y; char flag; printf("请输入操作数1,运算符,操作数2\n") scanf("%d%c%d",&x,&flag,&y); switch(flag) case +:printf("=%d\n",x+y); break; case -:printf("=%d\n",x-y); break; case *:printf("=%d\n",x*y); break; case /:printf("=%d\n",x/y); break; default: error; }

大荔县15011651778: c语言:从标准输入中读入一个整数算术运算表达式,如10+52 - 28,计算表达式结果,并输出 -
巧东艾本: 你把while(1)后面花括号内的语句改成下面的语句试一下:while(1) { scanf("%d",&a2); op1=='+'?a1+=a2:a1-=a2; scanf("%c",&op1); if(op1=='\n')break; } 如果还不行请留言.

大荔县15011651778: 用C语言编写一个最白痴的计算器程序
巧东艾本: 用switch (c) { case ('+') printf("%f+%f=%f",a,b);break; ..... }其他同理 c 是输入的字符 ,也就是+ - * / a,b时输入的数值

大荔县15011651778: c语言设计一个简单的计算器程序
巧东艾本: /* 2013年12月23日 12:43:46 目的:计算器的实现 */ # include <stdio.h> # include <ctype.h> # include <math.h> char get_choice(void); //获取用户输入的选项,并建立目 char get_first(void); //获取用户输入的选项,并剔除错误输入 float get_int(...

大荔县15011651778: 用C语言编个程序,.....题目,输入一个算术表达式(整数),输出表... -
巧东艾本: #include<stdio.h> void main() { int a,b; char oper; scanf("%d%c%d",&a,&oper,&b); switch(oper) { case '+': printf("%d+%d=%d\n",a,b,a+b); break; case '-': printf("%d-%d=%d\n",a,b,a-b); break; case '*': printf("%d*%d=%d\n",a,b,a*b); ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网