當前位置:首頁 » 操作系統 » 括弧匹配演算法

括弧匹配演算法

發布時間: 2022-01-15 19:08:35

㈠ 括弧匹配

//這是寫的源碼,你自己看看吧,我這邊調試過了,運行正常
#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);
}

㈡ 數據結構括弧匹配的演算法問題

return0 就是不匹配,return 1 就是匹配,最後判斷棧是不是空的,棧如果是空的,說明匹配了,返回 1 ,如果不是空的,說明還有左括弧,匹配失敗

㈢ 括弧匹配 基本演算法

用棧的數據結構

先讀入一個括弧,如果為左括弧,入棧,否則,出錯退出
繼續讀入括弧,如果是右括弧,檢查棧,如果非空,出棧(因為不把右括弧入棧,所以棧裡面都是左括弧),如果空,出錯退出

直到讀完處理完最後一個括弧,如果這個時候棧為空,那麼成功返回true,否則返回false

㈣ 括弧配對的演算法

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

應該先判斷,再出棧。不能先出棧再判斷。

㈥ 數據結構:括弧匹配問題。

include "seqstack1.h"

include "stdio.h"

void BracketMatch(char str);

void BracketMatch(char str) /*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();
}

㈧ 求多項式中括弧匹配演算法~~(有關數據結構,C++實現)

括弧可以用棧來匹配啊, 數據結構中的運算符優先法就是用棧實現的,
左右括弧都是運算符,規定(優先順序最底,要入棧到運算符棧, 其他運算符優先都要高於( 但低於),其他運算符之間的優先關系暫且忽略不說,也就是當讀取到) 的時候, 括弧內運算一定會結束並得出一個結果進入到操作數棧(由於 ) 的優先順序比其他所有運算符都高,其他運算符要出棧運算,並且把結果入到操作數棧),然後就是檢查操作數棧棧頂是否是左括弧,如果是在左括弧出棧,這樣左右括弧就一起消掉,如果不是,則報錯,你要檢查你的運算符優先表的定義,因為根據定義,到讀取到右括弧的時候,括弧內的運算會結束並得出結果, 空括弧不影響計算, 只是沒有操作數入棧而已,而且可以嵌套括弧 , 規定好了優先順序,可以實現多種不同優先順序的括弧的混合運算

㈨ 數據結構棧應用括弧匹配演算法

演算法如下:

從左開始向右掃描該表達式,
1、如遇左括弧(不論哪一種),將該左括弧入棧;
2、如是右括弧,如棧為空則返回出錯信息,不空就檢查其是否與棧頂左括弧是否配對,如是則棧頂元素出棧後繼續掃描(轉1 ),否則,返回出錯信息(出錯類型:右括弧先出現,或左右括弧不匹配,出錯位置);
3、如是其它字元,直接跳過,繼續掃描,如表達式未完則轉1;表達式結束轉4。
4、如棧空,顯示「匹配正確!」,否則顯示「缺失右括弧!」。

熱點內容
tiobe編程語言社區 發布:2024-12-26 10:48:11 瀏覽:423
日立存儲微碼升級 發布:2024-12-26 10:43:48 瀏覽:152
如何建立家庭網站伺服器 發布:2024-12-26 10:40:46 瀏覽:185
安卓顯示e是什麼意思 發布:2024-12-26 10:35:13 瀏覽:705
電磁爐編程 發布:2024-12-26 10:30:51 瀏覽:97
經典福克斯壓縮比是多少 發布:2024-12-26 10:26:33 瀏覽:747
存取速度最快的存儲器是 發布:2024-12-26 10:17:39 瀏覽:66
我的世界伺服器只能邊跳邊走 發布:2024-12-26 09:55:26 瀏覽:464
銹湖綠色盒子密碼是什麼 發布:2024-12-26 09:53:16 瀏覽:205
mysql資料庫連接類 發布:2024-12-26 09:49:21 瀏覽:83