數制轉換:將十進位制數轉換為任意進製數。由數制轉換的計算公式 n = (n / d) × d + n % d (其中n為想轉換的十進位制數,d為想轉換的進製) 我們可以知道其轉換後的結果是逆序輸出,故可以利用棧的先進後出的特性,將每一步計算的結果依次入棧之後再出棧,得出的結果正好是轉換後的數。
括號匹配:即利用棧檢驗輸入的括號是否正確配對,包括了三種括號的匹配,即( )、[ ]、。其巢狀的順序隨意,即 [ ( ) ] 或 等為正確匹配,而如果交叉如 [ ( ] ) 或 等則匹配失敗。
利用棧來實現其具體思想為:初始化乙個棧,依次讀取輸入的括號,若為左括號,則將括號壓入棧中;若為右括號,則取棧頂的元素,將該元素與右括號進行配對,若配對成功,則彈出該棧頂元素。繼續進行下乙個括號的讀取與判斷,若讀取完輸入的括號之後棧為空,則證明壓入的元素已全部彈出,即全部匹配完成;若棧不為空,則匹配失敗。
**如下:
(注:進行括號匹配時將主函式中數制轉換部分的**注釋掉即可)
#include
#include
#include
#include
typedef
int elemtype;
#define stack_int_size 100
typedef
struct
seqstack;
/*棧的初始化*/
void
initstack
(seqstack *s)
s->top=-1
; s->stacksize=stack_int_size;
}/*銷毀棧*/
void
destroystack
(seqstack *s)
}/*判斷棧空*/
bool isempty
(seqstack *s)
/*判斷棧滿*/
bool isfull
(seqstack *s)
/*取棧頂元素*/
elemtype gettop
(seqstack *s)
else
}/*元素入棧*/
void
push
(seqstack *s,elemtype e)
else
}/*元素出棧*/
void
pop(seqstack *s,elemtype *e)
else
}/*輸出棧元素*/
void
printstack
(seqstack *s)
else
}printf
("\n");
}/*數制轉換*/
void
conversion
(int num,
int r)
while(!
isempty
(&s))}
/*括號匹配*/
void
bracketmatch
(char str)
':e=
gettop
(&s);if
(e =='}
if(isempty
(&s)
)//若棧為空,則元素已匹配完,故匹配成功
printf
("括號匹配成功\n");
else
printf
("括號匹配失敗\n");
}int
main()
利用堆疊進行數制轉換
下面以無符號十進位制轉換為八進位制為例簡述數制轉換問題。將十進位制數num轉換為八進位制可以反覆執行以下步驟得到 1,將num除以8,取其餘數 2,判斷num除以8的商 若商為零,則轉換到此結束 若商不為零,則將商送num,轉到第1步。演算法描述如下 將無符號十進位制數轉換為八進位制數 堆疊採用順序...
資料結構 利用棧進行數制轉換的實現
程式如下 當程式執行後,比如數個1348,結果無限返回2,是什麼問題呢,跪求大佬。include include define stack init size 100 define stackincrement 10 typedef int elemtype typedef int status u...
C語言中利用棧檢測括號是否匹配
檢測括號是否匹配的演算法中,棧的特性是最符合括號特點的。棧的先進後出將括號的匹配正好完美實現。思想 從字串開頭向後逐個檢測,檢測到除括號外的元素就跳過。檢測到左括號時,就進行入棧操作,繼續向後檢測。檢測到有括號時,就檢查棧頂元素是否是匹配的左括號。若不匹配,則直接返回錯誤訊號,使程式結束 若匹配,進...