今天長沙天氣特別冷,一下課就坐車回宿舍了。還是做自己的資料結構……看到堆疊那節,看到算符優先法就想動手編下,再聯想到上次看到一題目是x1 ,x2,x3,x4,x5中間放四個算術符,結果等於y的有多少種符號的集合。正好想到可利用回溯法找出它所的排列來,也不是4的全排列,然後利用算符優先得出其結果,最後判斷是否相等即可!同時也複習下堆疊的知識。說真的,剛寫完它的時候也小錯誤大難,在堆疊的出棧還出現了死迴圈的,冷靜的轉了半天才算完成,**夠多,但沒什麼技術含量,只是為自己做乙個筆記,同時也紀念下自己寫過的算是長程式了吧。。
#include
#include
#include
#include
#define stack_init_size 100
#define len 10
vectorss;
char x[len];
char h[4]=;
int numsource[5]; 用於輸入原始資料
int y;
int sum=0;///用於計算總共有多少種符合要求
void process(vectorss);/在定義之前呼叫的函式申明
typedef structsignal;
signal mm[5]; 用於定義優先順序的陣列
/*定義數字堆疊*/
typedef structnumstack;
/*定義字元堆疊*/
typedef structcharstack;
numstack optn; ///定義資料堆疊
charstack optr;///定義字元堆疊
/*數字堆疊的初始化*/
void initstack(numstack &optn)
/*字元堆疊的初始化*/
void initstack(charstack &optr)
/*數字堆疊的入棧*/
void push(numstack &optn,int e)
/*字元堆疊的入棧*/
void push(charstack &optr,char e)
/*數字堆疊的出棧*/
void pop(numstack &optn, int &e)
/*字元堆疊的出棧*/
void pop(charstack &optr, char &e)
/*取字元堆疊棧頂元素*/
void gettop(charstack optr,char &e)
/*堆疊過程中的數值符號計算*/
int operater(int num1,char ch,int num2)
}/*構造字元數字表示式向量*/
void constructed(vector&ss,char *x, int *y)
ss.push_back(y[i]+48);
ss.push_back('#');
for(i=0;i<11;i++)
cout<
/*棧頂字元與輸入字元的優先順序比較*/
int precede(char c1,char c2)
return p1>=p2?2:-2; }
int fun(char x,int t, char c)
/*搜尋符號函式*/
void backtrack(int t)
else
if(precede(str,mm)==0) p=1;
push(optr,str);
str=ss[++i];
}/swith
if(p==1) break;
gettop(optr,mm);
}else
}//while
pop(optn,result);
if(result==y) sum++;
cout<
int main(int argc, char *argv)
資料結構 算術表示式 算符優先法
還新增了乘方的優先順序,自行參考 一開始我寫的只能輸入個位數,後來想了好久才解決,主要是在判斷是否為運算子後,若不是運算子,別急著入棧,用乙個標記陣列記著,若下乙個字元還不是運算子,則利用strcat函式鏈結之前標記陣列和這乙個字元,直到下乙個字元是運算子為止,才入棧。至於負數的運算,則要判斷是否連...
資料結構與演算法學習筆記
演算法基礎篇 第一章 演算法概述 首先了解一下基本的概念 1.1 什麼是演算法呢?從字面意義上理解,演算法就是用於計算的方法,用這種方法達到預期的結果。通俗的講,演算法可以理解為乙個完整的解題步驟,由一些基本的運算和規定的運算順序組成。通過這樣的解題步驟可以解決特定的問題。演算法可以抽象出5個特徵 ...
資料結構和演算法學習筆記
資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說資料結構就是關係,元素相互之間存在的一種或多種特定關係的集合。1.1 邏輯結構和物理結構 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條...