鏈式表示的棧 鏈式棧2 進製轉換

2021-09-01 15:44:41 字數 1890 閱讀 7482

利用鍊錶模擬棧實現十進位制數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 ...