利用鍊錶模擬棧實現十進位制數2015轉換為對應的八進位制數。
【分析】
一般情況下,把十進位制轉換為八進位制、二進位制等可以使用輾轉相除法,例如將十進位制數2015轉換為八進位制數的過程如圖。
轉換後的八進位制數為(3737)在圖中,被除數除以8得到商數,記下餘數,又將商數作為新的被除數繼續除以8,直到商為0為止,把得到的餘數排列起來就是轉換後的八進位制數。由此得到十進位制數轉換八進位制數的演算法如下:
(1)將n除以8,記下餘數;
(2)判斷商是否為0,如果為0,程式結束;否則將商送入n轉到(1)繼續執行。
得到餘數序列的逆序就是所求的八進位制數。需要注意的是這些得到的八進位制數是從低位到高位產生的,最先得到的餘數是八進位制數的最低位,最後得到的餘數是八進位制數的最高位。得到的位序正好和八進位制數的位序相反,這恰好可利用棧的「後進先出」特性,先把得到的餘數序列放入棧中儲存,最後依次出棧正好是所求的八進位制數。如圖。
利用鏈棧的基本操作也可以實現:
seqstack.h
#pragma once
#include #include using namespace std;
typedef int datatype;
typedef struct node
lstacknode,*linkstack;
void initstack(linkstack *top)
(*top)->next = null;
}int stackempty(linkstack top)
else }
int pushstack(linkstack top, datatype e)
p->data = e;
p->next = top->next;
top->next = p;
return 1;
}int popstack(linkstack top, datatype *e)
top->next = p->next;
*e = p->data;
free(p);
return 1;
}int gettop(linkstack top, datatype *e)
*e = p->data;
return 1;
}int stacklength(linkstack top)
return count;
}void destorystack(linkstack top)
}
main.cpp
#include "seqstack.h"
#include void conversion(int n)
while (!stackempty(s)) }
void main()
棧的鏈式儲存表示
typedef struct stack node elemtype data struct stack node next stack node 1 棧的初始化 stack node init link stack void stack node top top stack node malloc...
鏈式表示的棧 鏈式棧4 算術表示式
通過鍵盤輸入乙個表示式,如21 15 7 9 3,要求將其轉換為字尾表示式,並計算表示式的值。分析 求表示式的值是高階程式語言中編譯器設計的乙個基本問題。它的實現借助於棧的 後進先出 特性。乙個算術表示式是由運算元 運算物件 運算子和分解符 括號 組成的有意義的式子。運算子從運算物件的個數上分為單目...
鏈棧 棧的鏈式表示和實現
用鏈表示的棧的基本操作 include include define maxsize 1000 鍊錶的最大長度 define selemtype int define status int 棧的結構 typedef struct lstacklstack,lstacklist 初始化 status ...