鍊錶,逆波蘭表示式

2021-06-25 23:19:16 字數 1648 閱讀 6808

遇到的問題:

1.c語言中求隨機數

int n;

srand((unsigned)time(null));     /*隨機種子*/

n=rand()%(y-x+1)+x;          /*n為x~y之間的隨機數*/

3.合併兩個鍊錶要注意如果兩個表長不一樣,走到短的鍊錶的最後乙個結點,出迴圈,然後進行掛鏈

實現功能的部分**:

//實現兩個鍊錶的交插合併(a1,b1,a2,b2...)

void combinelink(elemsn *h1,elemsn *h2)

if (p1->next==null)

p1->next=q1;

if (q1->next==null)}

4.一條鍊錶分成奇偶兩條鏈

分析:<1>要在主函式外寫的話只能return乙個值,那就是說主鏈的頭指標不能動,如果主鏈放

奇數,那就新建一條鏈放偶數結點最後要return的值就是新建的鏈的頭指標。

<2>有兩種方法可以選擇,第一種,依次判斷主鏈中的結點的資料域的值,若為奇數,則p=p->next;否則進行刪除,注意(是在主鏈中進行刪除,並非真正的刪除),如果為第乙個偶數結點,用兩個指標指上,從第二個開始進行掛鏈。(第乙個偶數結點從主鏈刪除時給該結點的next賦空)第二種方法(不建議採用)從鍊錶的第乙個結點開始遍歷,遇到偶結點就掛在鏈後面,最後,再次遍歷,一旦遇到資料域的值為偶數,則將兩條鏈分開即可。

5.約瑟夫環的問題:

分析:約瑟夫環要建乙個迴圈鍊錶,(不要帶表頭結點)

終止條件為只剩乙個結點時,則用while(n-1)每次迴圈刪除乙個結點( n--) 一次。

6.逆波蘭表示式(相當於計算器的功能)

分析:<1>首先對輸入的字串遍歷,有四種情況,

(1)數字字元,要先把數字字元轉換過來,放入棧內,首先要建兩個棧,乙個用來存數字,乙個用來存運算子。

(2)運算子,注意入棧時要先與棧內的運算子進行比較,當優先順序大於棧內的運算子時入棧。

(3)左括號,直接入棧。

(4)右括號,運算子出棧進行計算,一直出棧到左括號為止。

//用來比較運算子的優先順序

int level(char op)

return i;

}//用來計算兩個數的加減乘除

int  cal(char op,int x1,int x2)

return i;

}//處理過程

int progress(char s)

snum[++tnum]=y;

}else if(*p=='+'||*p=='-'||*p=='*'||*p=='/')

// p++;

sop[++top]=*p++;

}else if (*p=='(')

else if (*p==')')

top--;

p++;

}else p++;

}while(sop[top]-'@')//當運算子棧不為空,一直出棧,進行運算。

return snum[tnum];}

總結:當編寫一段比較長的**時,一定要細心認真,注意在定義變數,書寫函式的判斷條件,以及括號的位置等,否則**出錯查bug很麻煩,還有就是注意盡量**中不要有重複語句,實現各個功能盡量分塊來寫,(乙個函式乙個功能),上機敲**之前對問題認真分析,最好先在紙上寫好。

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...

波蘭表示式與逆波蘭表示式

2018年09月03日 11 29 15 jitwxs 閱讀數 70 標籤 波蘭 字首 更多 個人分類 演算法與資料結構 常見的算術表示式,稱為中綴表示式,例如 5 6 4 2 3波蘭表示式也稱為字首表示式,以上面的例子為例,其波蘭表示式為 5 6 4 2 3中綴表示式轉換字首表示式的操作過程為 1...