頭文件:(另存為SeqStack.h)
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出盂縣免費(fèi)做網(wǎng)站回饋大家。
typedef struct
{
DataType stack[MaxStackSize];
int top;
} SeqStack;
void StackInitiate(SeqStack *S) /*初始化順序堆棧S*/
{
S-top = 0; /*定義初始棧頂下標(biāo)值*/
}
int StackNotEmpty(SeqStack S)
/*判順序堆棧S非空否,非空則返回1,否則返回0*/
{
if(S.top = 0) return 0;
else return 1;
}
int StackPush(SeqStack *S, DataType x)
/*把數(shù)據(jù)元素值x壓入順序堆棧S,入棧成功則返回1,否則返回0 */
{
if(S-top = MaxStackSize)
{
printf("堆棧已滿無法插入! \n");
return 0;
}
else
{
S-stack[S-top] = x;
S-top ++;
return 1;
}
}
int StackPop(SeqStack *S, DataType *d)
/*彈出順序堆棧S的棧頂數(shù)據(jù)元素值到參數(shù)d ,出棧成功則返回1,否則返回0*/
{
if(S-top = 0)
{
printf("堆棧已空無數(shù)據(jù)元素出棧! \n");
return 0;
}
else
{
S-top --;
*d = S-stack[S-top];
return 1;
}
}
int StackTop(SeqStack S, DataType *d)
/*取順序堆棧S的當(dāng)前棧頂數(shù)據(jù)元素值到參數(shù)d ,成功則返回1,否則返回0*/
{
if(S.top = 0)
{
printf("堆棧已空! \n");
return 0;
}
else
{
*d = S.stack[S.top - 1];
return 1;
}
}
括號(hào)問題
#include string.h
#include stdio.h
#include stdlib.h
#define MaxStackSize 100
typedef char DataType;
#include "SeqStack.h"
void ExpIsCorrect(char exp[], int n)
//判斷有n個(gè)字符的字符串exp左右括號(hào)是否配對(duì)正確
{
SeqStack myStack; //定義鏈?zhǔn)蕉褩?/p>
int i;
char c;
StackInitiate(myStack);
for(i = 0; i n; i++)
{
if((exp[i] == '(') || (exp[i] == '[') || (exp[i] == '{'))
StackPush(myStack, exp[i]); //入棧
else if(exp[i] == ')' StackNotEmpty(myStack)
StackTop(myStack, c) c == '(')
StackPop(myStack, c); //出棧
else if(exp[i] == ')' StackNotEmpty(myStack)
StackTop(myStack, c) c != '(')
{
printf("左右括號(hào)配對(duì)次序不正確!\n");
return;
}
else if(exp[i] == ']' StackNotEmpty(myStack)
StackTop(myStack, c) c == '[')
StackPop(myStack, c); //出棧
else if(exp[i] == ']' StackNotEmpty(myStack)
StackTop(myStack, c) c != '[')
{
printf("左右括號(hào)配對(duì)次序不正確!\n");
return;
}
else if(exp[i] == '}' StackNotEmpty(myStack)
StackTop(myStack, c) c == '{')
StackPop(myStack, c); //出棧
else if(exp[i] == '}' StackNotEmpty(myStack)
StackTop(myStack, c) c != '{')
{
printf("左右括號(hào)配對(duì)次序不正確!\n");
return;
}
else if(((exp[i] == ')') || (exp[i] == ']') || (exp[i] == '}'))
!StackNotEmpty(myStack))
{
printf("右括號(hào)多于左括號(hào)!\n");
return;
}
}
if(StackNotEmpty(myStack))
printf("左括號(hào)多于右括號(hào)!\n");
else
printf("左右括號(hào)匹配正確!\n");
}
void main(void)
{
char a[] = "(())abc{[)(]}"; //測(cè)試?yán)?。左右括號(hào)配對(duì)次序不正確
char b[] = "(()))abc{[]}"; //測(cè)試?yán)?。右括號(hào)多于左括號(hào)
char c[] = "(()()abc{[]}"; //測(cè)試?yán)?。左括號(hào)多于右括號(hào)
char d[] = "(())abc{[]}"; //測(cè)試?yán)?。左右括號(hào)匹配正確
int n1 = strlen(a);
int n2 = strlen(b);
int n3 = strlen(c);
int n4 = strlen(d);
ExpIsCorrect(a, n1);
ExpIsCorrect(b, n2);
ExpIsCorrect(c, n3);
ExpIsCorrect(d, n4);
}
二者放于同一目錄下即可
#includestdio.h
#includestring.h
#includemalloc.h
#includestdlib.h
#define?MaxSize?50
typedef?struct
{
float?data[MaxSize];
int?top;
}OpStack;
typedef?struct
{
char?data[MaxSize];
int?top;
}SeqStack;
void?InitStack(SeqStack?*S);//初始化棧
int?StackEmpty(SeqStack?S);//判斷棧是否為空
int?PushStack(SeqStack?*S,char?e);//進(jìn)棧
int?PopStack(SeqStack?*S,char?*e);//刪除棧頂元素
int?GetTop(SeqStack?S,char?*e);//取棧頂元素
void?TranslateExpress(char?s1[],char?s2[]);//將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式
float?ComputeExpress(char?s[]);//計(jì)算后綴表達(dá)式的值
void?main()
{
char?a[MaxSize],b[MaxSize];
float?f;
printf("請(qǐng)輸入一個(gè)算術(shù)表達(dá)式:\n");
gets(a);
printf("中綴表達(dá)式為:%s\n",a);
TranslateExpress(a,b);
printf("后綴表達(dá)式為:%s\n",b);
f=ComputeExpress(b);
printf("計(jì)算結(jié)果:%f\n",f);
}
void?InitStack(SeqStack?*S)//初始化棧
{
S-top=0;
}
int?StackEmpty(SeqStack?S)//判斷棧是否為空
{
if(S.top?==0)
return?1;
else
return?0;
}
int?PushStack(SeqStack?*S,char?e)//進(jìn)棧
{
if(S-top=MaxSize)
{
printf("棧已滿,不能進(jìn)棧!");
return?0;
}
else
{
S-data[S-top]=e;
S-top++;
return?1;
}
}
int?PopStack(SeqStack?*S,char?*e)//刪除棧頂元素
{
if(S-top==0)
{
printf("棧已空\(chéng)n");
return?0;
}
else
{
S-top--;
*e=S-data[S-top];
return?1;
}
}
int?GetTop(SeqStack?S,char?*e)//取棧頂元素
{
if(S.top=0)
{
printf("棧已空");
return?0;
}
else
{
*e=S.data[S.top-1];
return?1;
}
}
void?TranslateExpress(char?str[],char?exp[])//把中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式
{
SeqStack?S;
char?ch;
char?e;
int?i=0,j=0;
InitStack(S);
ch=str[i];
i++;
while(ch!='\0')???//依次掃描中綴表達(dá)式
{
switch(ch)
{
case'(':
PushStack(S,ch);
break;
case')':
while(GetTop(S,e)e!='(')
{
PopStack(S,e);
exp[j]=e;
j++;
}
PopStack(S,e);
break;
case'+':
case'-':
while(!StackEmpty(S)GetTop(S,e)e!='(')
{
PopStack(S,e);
exp[j]=e;
j++;
}
PushStack(S,ch);
break;
case'*':
case'/':
while(!StackEmpty(S)GetTop(S,e)e=='/'||e=='*')
{
PopStack(S,e);
exp[j]=e;
j++;
}
PushStack(S,ch);
break;????//是空格就忽略
case'?':
break;
default:
while(ch='0'ch='9')
{
exp[j]=ch;
j++;
ch=str[i];
i++;
}
i--;
exp[j]='?';
j++;
}
ch=str[i];
i++;
}
while(!StackEmpty(S))???//將棧中剩余運(yùn)算符出棧
{
PopStack(S,e);
exp[j]=e;
j++;
}
exp[j]='\0';
}
float?ComputeExpress(char?a[])//計(jì)算后綴表達(dá)式的值
{
OpStack?S;
int?i=0;
float?x1,x2,value;
float?result;
S.top=-1;
while(a[i]!='\0')?????//依次掃描后綴表達(dá)式
{
if(a[i]!='?'a[i]='0'a[i]='9')//如果是數(shù)字
{
value=0;
while(a[i]!='?')????//如果不是空格
{
value=10*value+a[i]-'0';
i++;
}
S.top++;
S.data[S.top]=value;???//處理后進(jìn)棧
}
else??????????//如果是運(yùn)算符
{
switch(a[i])
{
case'+':
x1=S.data[S.top];
S.top--;
x2=S.data[S.top];
S.top--;
result=x1+x2;
S.top++;
S.data[S.top]=result;
break;
case'-':
x1=S.data[S.top];
S.top--;
x2=S.data[S.top];
S.top--;
result=x2-x1;
S.top++;
S.data[S.top]=result;
break;
case'*':
x1=S.data[S.top];
S.top--;
x2=S.data[S.top];
S.top--;
result=x1*x2;
S.top++;
S.data[S.top]=result;
break;
case'/':
x1=S.data[S.top];
S.top--;
x2=S.data[S.top];
S.top--;
result=x2/x1;
S.top++;
S.data[S.top]=result;
break;
}
i++;
}
}
if(!S.top!=-1)????//如果棧不空,將結(jié)果出棧并返回
{
result=S.data[S.top];
S.top--;
if(S.top==-1)
return?result;
else
{
printf("表達(dá)式錯(cuò)誤");
exit(-1);
}
}
return?0;
}
#include stdio.h
#include stdlib.h
int main()
{
int i,count;
char ch[10001],ch1[10001];
while(gets(ch)!=NULL)
{
??count=-1;
? for(i=0;ch[i]!='\0';i++)
? {
? ? ? if(ch[i]=='('||ch[i]=='['||ch[i]==''||ch[i]=='{')
? ? ? {
? ? ? ? ? ch1[++count]=ch[i];
? ? ? }
? ? ? else
? ? ? {
? ? ? ? ? if(ch[i]-ch1[count]3)
? ? ? ? ? {
? ? ? ? ? ? ? count--;
? ? ? ? ? }
? ? ? ? ? else
? ? ? ? ? {
? ? ? ? ? ? ? break;
? ? ? ? ? }
? ? ? }
? }
? if(count==-1)
? ? ? printf("YES\n");
? else
? ? ? printf("NO\n");
}
return 0;
}