❶ 用C語言寫出三種括弧匹配的演算法(小括弧,中括弧,花括弧)
❷ 括弧匹配 基本演算法
用棧的數據結構
先讀入一個括弧,如果為左括弧,入棧,否則,出錯退出
繼續讀入括弧,如果是右括弧,檢查棧,如果非空,出棧(因為不把右括弧入棧,所以棧裡面都是左括弧),如果空,出錯退出
直到讀完處理完最後一個括弧,如果這個時候棧為空,那麼成功返回true,否則返回false
❸ 數據結構括弧匹配的演算法問題
return0 就是不匹配,return 1 就是匹配,最後判斷棧是不是空的,棧如果是空的,說明匹配了,返回 1 ,如果不是空的,說明還有左括弧,匹配失敗
❹ 求多項式中括弧匹配演算法~~(有關數據結構,C++實現)
括弧可以用棧來匹配啊, 數據結構中的運算符優先法就是用棧實現的,
左右括弧都是運算符,規定(優先順序最底,要入棧到運算符棧, 其他運算符優先都要高於( 但低於),其他運算符之間的優先關系暫且忽略不說,也就是當讀取到) 的時候, 括弧內運算一定會結束並得出一個結果進入到操作數棧(由於 ) 的優先順序比其他所有運算符都高,其他運算符要出棧運算,並且把結果入到操作數棧),然後就是檢查操作數棧棧頂是否是左括弧,如果是在左括弧出棧,這樣左右括弧就一起消掉,如果不是,則報錯,你要檢查你的運算符優先表的定義,因為根據定義,到讀取到右括弧的時候,括弧內的運算會結束並得出結果, 空括弧不影響計算, 只是沒有操作數入棧而已,而且可以嵌套括弧 , 規定好了優先順序,可以實現多種不同優先順序的括弧的混合運算
❺ 括弧配對的演算法
void peii(void)前部有個
scanf("%c",&data);
這里data獲取了一個字元,但是用來確定的<CR>還在IO流中,所以後面第一個
scanf("%c",&data);
直接得到了<CR>,而不需要等待你的輸入,接著執行第二個,IO流中已經沒有字元了,所以等待你的輸入.
這就是為什麼你的一條語句的話直接跳過,二條語句的話入等待你的輸入.
❻ 數據結構 括弧匹配演算法
樓上說的是一個原因,不過去掉!StackEmpty(S)後問題依舊。
你的原因主要是這里:
case ')':{Pop(S,e);
if(e!='(') flag=1; break;}
應該先判斷,再出棧。不能先出棧再判斷。
❼ 數據結構棧應用括弧匹配演算法
演算法如下:
從左開始向右掃描該表達式,
1、如遇左括弧(不論哪一種),將該左括弧入棧;
2、如是右括弧,如棧為空則返回出錯信息,不空就檢查其是否與棧頂左括弧是否配對,如是則棧頂元素出棧後繼續掃描(轉1 ),否則,返回出錯信息(出錯類型:右括弧先出現,或左右括弧不匹配,出錯位置);
3、如是其它字元,直接跳過,繼續掃描,如表達式未完則轉1;表達式結束轉4。
4、如棧空,顯示「匹配正確!」,否則顯示「缺失右括弧!」。
❽ 括弧匹配
//這是寫的源碼,你自己看看吧,我這邊調試過了,運行正常
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_SIZE 100
#define MAX_STR_SIZE 100
typedef struct
{
char s[STACK_SIZE];
int top;
}Stack;
//輸入要判別的字元串
void inputStr(char str[])
{
char ch;
int i=0;
printf("請輸入串(以'#'結束):");
while(((ch=getchar())!='#')&&i<MAX_STR_SIZE-1)
{
str[i]=ch;
i++;
}
str[i]='#';
}
//初始化棧
Stack *initStack(Stack *stack)
{ stack=(Stack *)malloc(sizeof(Stack));
stack->top=-1;
return stack;
}
//判斷棧是否為空
int isStackEmpty(Stack *stack)
{
if(stack->top==-1)
return 1;
else
return 0;
}
char getElem(Stack *stack)
{
return stack->s[stack->top];
}
void push(Stack *stack,char ap)
{
stack->top++;
stack->s[stack->top]=ap;
}
void pop(Stack *stack)
{
stack->top--;
}
//判斷
void pipei(char str[])
{
Stack *stack;
char c;
int i=0;
stack=initStack(stack);
while(str[i]!='#')
{
if(str[i]>='A'&&str[i]<='Z')
{
if(!isStackEmpty(stack))
{
c=getElem(stack);
if((c+str[i]==155)&&(c<str[i]))
pop(stack);
else
push(stack,str[i]);
}
else push(stack,str[i]);
}
i++;
}
if(isStackEmpty(stack))
printf("\n該串是一個匹配表達式!\n");
else
printf("\n該串不是一個匹配表達式!\n");
}
//串輸出
void outputStr(char str[])
{
}
main()
{
char str[MAX_STR_SIZE];
inputStr(str);
// outputStr(str);
pipei(str);
}
❾ C#括弧匹配問題演算法
constCharRIGHT='}';
constCharLEFT='{';
staticvoidMain(string[]args)
{
Queue<Char>queue=newQueue<Char>();
StringtargetValue="sd{{}";
BooleanisValid=true;
foreach(CharitemintargetValue)
{
if(item.Equals(LEFT))queue.Enqueue(item);
if(queue.Count>0&&!item.Equals(RIGHT)&&!item.Equals(LEFT)){
isValid=false;
break;
}
if(queue.Count>0&&item.Equals(RIGHT))queue.Dequeue();
}
if(isValid&&queue.Count==0)Console.WriteLine("匹配");
elseConsole.WriteLine("不匹配");
Console.ReadKey();
}