1. 程式人生 > >C語言資料結構如何判斷表示式是否匹配

C語言資料結構如何判斷表示式是否匹配

#include<iostream>  
#include<cstring>  
#include<malloc.h>  
using namespace std;  




#define MAXSIZE 100
typedef int datatype;
typedef  struct
{
datatype a[MAXSIZE];
int top;
}sequence_stack;


//棧(順序儲存)初始化
void init(sequence_stack *st)
{
st->top = 0;
}


//判斷棧是否為空
int empty(sequence_stack st)
{
return(st.top ? 0 : 1);
}


//取得棧頂的結點值
datatype read(sequence_stack st)
{
if (empty(st))
{
printf("\n棧是空的!");
exit(1);
}
else
return st.a[st.top -1];
}


//棧的插入操作
void push(sequence_stack *st,datatype x)
{
if(st ->top == MAXSIZE)
{
printf("\n The sequence stack is full!");
exit(1);
}
st -> a[st -> top] = x;
st -> top ++;
}


//棧的刪除操作
void pop(sequence_stack *st)
{
if(st -> top == 0)
{
printf("\nThe sequence stack is empty!");
exit(1);
}
st -> top--;
}




//判斷表示式括號是否匹配
int match_kuohao(char c[])
{
int i = 0;
sequence_stack s;
init(&s);
while(c[i] != '#')
{
switch(c[i])
{
case '{':
case '[':
case '(':push (&s,c[i]);
break;
case '}':if(!empty(s) && read(s) == '{')
{
pop(&s);
break;
}
else return 0;
case ']':if(!empty(s) && read(s) == '[')
{
pop(&s);
break;
}
case ')':if(!empty(s) && read(s) == '(')
{
pop(&s);
break;
}
else return 0;
}
i ++;
}
return (empty(s));
}


 int main()  
{  
    char s[100];
cout<<"請輸入一個長度小於100的字串:"<<endl;
    cin>>s;  
    int re =  match_kuohao(s);
if(re == 0)
{
cout<<"你輸入的字串括號匹配!"<<endl;
}
else if (re == 11)
{
        cout<<"你輸入的字串括號不匹配!"<<endl;
}


return 0;
}  

相關推薦

C語言資料結構如何判斷表示式是否匹配

#include<iostream>  #include<cstring>  #include<malloc.h>  using namespace std;  #define MAXSIZE 100typedef int datatype

C語言資料結構——雙迴圈連結串列的插入操作順序

雙向連結串列與單鏈表的插入操作的區別 雙向連結串列因為存在前驅指標和後繼指標所以需要修改的指標多於單鏈表,但指標改動的順序同樣重要 單鏈表的插入 eg:在節點p的後面插入指標s s->next=p->next;//首先要使要插入的指標指向p->next p->next=s

C語言資料結構-二叉樹、哈夫曼、佇列小練習

原始碼地址 GitHub:https://github.com/GYT0313/C-DataStructure 1. 二叉樹 要求: 掌握二叉樹的二叉連結串列的建立方法; 掌握二叉樹的3種遍歷遞迴演算法; 掌握二叉樹的3種遍歷的非遞迴演算法。 程式

C語言資料結構與演算法之深度、廣度優先搜尋

一、深度優先搜尋(Depth-First-Search 簡稱:DFS) 1.1 遍歷過程:   (1)從圖中某個頂點v出發,訪問v。   (2)找出剛才第一個被頂點訪問的鄰接點。訪問該頂點。以這個頂點為新的頂點,重複此步驟,直到訪問過的頂點沒有未被訪問過的頂點為止。   (3)返回到

C語言資料結構——一步步教會你尾插法和頭插法

連結串列也是線性表的一種,與順序表不同的是,它在記憶體中不是連續存放的。在C語言中,連結串列是通過指標相關實現的。而單鏈表是連結串列的其中一種,關於單鏈表就是其節點中有資料域和只有一個指向下個節點的指標域。  建立單鏈表的方法有兩種,分別是頭插法和尾插法。 所謂頭插法,就是按節點的

c語言資料結構之順序表

c語言資料結構之順序表:     順序表的結構跟陣列比起來還是很像的,相比於連結串列,資料表的優勢主要體現在他的查詢速度上,而連結串列的優勢相反,查詢速度慢,但對於插入一個數據來說還是比較快的 下面我們就來建立一個順序表 1:定義資料型別,我定義的是一個學生的結構體型別,首

C語言-資料結構-鏈佇列

** 鏈式佇列 ** 使用兩種不同的方式作為初始化, 特點: 一種是傳遞 Init(&Q); 一種是直接P Q = create(); 我覺得還是這種的方式比較靈活,對比見程式 注:我的習慣是直接寫成標頭檔案,方便呼叫 這個程式使用的 是InitQue

線性表的建立————C語言資料結構學習

#include <stdio.h> #include <malloc.h> #define MaxSize 50 typedef int ElemType; typedef struct { ElemType data[MaxSize];

C語言資料結構——連結串列

轉自https://www.cnblogs.com/chenxiaohei/p/6862791.html /* 連結串列節點的插入與刪除 編譯環境:VC++ 6.0 編譯系統:windows XP SP3 */ #inc

C語言資料結構的簡單實驗——二叉樹的遍歷

實驗題目: 建立一株用二叉連結串列儲存的二叉樹,並對其進行遍歷。 實驗思路: 解題關鍵是要建立二叉樹,因此對語二叉樹的每一個節點,我以連結串列為儲存方式並用遞迴的思想對其進行定義。 ** 程式碼實現: ** #include<stdio.h> #in

C語言資料結構用 棧 實現進位制轉化

直接上程式碼,思路看註釋; /*棧實現進位制轉化 *十進位制最大轉化為36進位制用10(A)-35(Z)表示 */ #include<stdio.h> #include<malloc.h> #include<stdlib.h> #

C語言資料結構單鏈表之溫故而知新

拋棄繁雜的定義,以實用,實戰的角度來學習資料結構,這將使得資料結構的學習非常的簡單。前面已經學習了單鏈表的建立操作:http://blog.csdn.net/morixinguan/article/details/68951912這節,將單鏈表溫習的筆記共享出來,然後寫一個例

C語言資料結構——求二叉樹葉子結點個數

小編儲存了不少程式碼,最近新開通了CSDN部落格,以前一直看到別人的程式碼分享,深受啟發,非常感謝,所以小編現在也要將自己的程式碼分享給大家,希望大家可以與瀟小白一起在程式設計的道路上越走越遠,早日成為大佬!雖然我目前只是一名大二的學生,不過我會努力噠!加油!

C語言資料結構——分析二叉樹的相似性

程式碼比較簡單,瀟小白就直接放程式碼啦!如果有什麼問題歡迎在下方評論哦!讓我們一起進步,向大佬進發! 程式碼如下: #include <stdio.h> #include <malloc.h> #include <conio

c語言資料結構中兩個有序連結串列合併為一個新連結串列

先建立兩個連結串列La和Lb,並向La Lb中輸入值,然後再建立一個Lc,Lc指向La,具體程式碼如下: #include "stdafx.h" #include"stdio.h" #include"stdlib.h" #define OK 1 #define OVERFL

C語言資料結構-順序佇列

順序佇列 順序佇列與順序表相似,只不過其具有佇列的運算規則。資料只能從隊尾進,對頭出,為先進先出方式。 分別用兩個數來表示隊頭front和隊尾rear的位置,其只能向前增加,不能退後,這樣容易溢位且浪費空間,因此一般用迴圈佇列來表示,及佇列空間的首尾相連的,

C語言資料結構——樹的雙親表示法

1、樹的雙親表示法: 2、/* bo6-4.c 樹的雙親表儲存(儲存結構由c6-4.h定義)的基本操作(14個) */ Status InitTree(PTree *T) { /* 操作結果: 構造空樹T */ (*T).n=0; r

C語言資料結構--相對路徑設計

#include<stdio.h> #include<stdlib.h> #include<iomanip.h> #include <process.h> typedef struct node//邊表結點 { int adjvex; //

C語言 資料結構 樹和二叉樹

樹 1、樹:是n節點的有限集。樹是n(n=>0)個節點的有限集。 n=0時成為空樹。 在任意一顆非空樹中:(1)有且僅有一個稱為根的節點;(2)當n>0時,其餘節點可分為m(m>0)個互不相交的有限集T1、T2、T3、Tm,其中每個節點又是一棵樹,並且稱

迴圈佇列 C語言資料結構

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列