十進位制轉換任意進位制--鏈棧實現
首先,先了解一下c語言const用法:
修飾區域性變數,int const a = 9; const int b = 8;這兩種寫法是一樣的,表示a和b都是常量,不可改變。需要注意的是,用const修飾變數時,一定要給變數初始化,否則之後就不能再進行賦值了。
完整程式碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char f[]="0123456789ABCDEF";//定義一個全域性常量 ,方便匯出十進位制以上的不為數字形式的資料的顯示
typedef struct StackNode //建立鏈式棧的結構體
{
char data;//棧的資料域,為了方便設定成char型別
struct StackNode *next; //棧的指標域
}SqStack,*LinkStack;
void InitStack(LinkStack &S)//棧的初始化,只有建立一個棧頂結點這一步
{
S = (SqStack*)malloc(sizeof(SqStack));//建立一個野結點,使其為NULL,便成為棧頂結點。
S = NULL;
}
int Push(LinkStack &S,char e)//進棧
{
SqStack* p;//定義一個野結點
p = (SqStack*)malloc(sizeof(SqStack));
p->data = e;//使該結點裝上資料元素e,並使其next等於S,類似於連結串列的頭插法
p->next = S;
S = p;//棧頂結點S,一直在棧的最前方
return 0;
}
void Pop(LinkStack &S)//使棧頂元素出棧,並返回棧頂元素
{
if(S==NULL)//判斷棧是否為空
{
printf("棧空!");
}
else
{
SqStack* p;//這裡定義一個結點,方便後面對棧頂結點的釋放
printf("%c",S->data);//輸出棧頂資料
p = S;
S = S->next;//使棧頂結點指向下一個結點,類似於棧減一
free(p);//釋放棧頂元素
}
}
void Decimal(LinkStack S)//十進位制轉換任意進位制函式
{
int n,//輸入的十進位制數
m,//輸入的要轉的進位制
i=0;//記錄次數變數
printf("請輸入一個十進位制數: ");
scanf("%d",&n);
while(1)//用於檢測換行符,使函式脫離scanf的連續輸出
if(getchar()=='\n')
break;
printf("請輸入要轉的進位制: ");
scanf("%d",&m);
while(n)//迴圈終止條件是n為0
{
Push(S,f[n%m]);//進棧,進的是char型
n=n/m;
i++;//記錄迴圈次數,方便出棧
}
printf("結果:");
while(i--) //出棧操作
Pop(S);
}
int main()
{
LinkStack S;
InitStack(S);//定義一個棧,並初始化
Decimal(S);//進位制轉換函式
return 0;
}
(完)
相關文章
- Qt進位制轉換(十進位制轉十六進位制)QT
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- JavaScript十進位制轉換為二進位制JavaScript
- 計算機求解10進位制轉換任意進位制計算機
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- n進位制轉十進位制
- 十進位制轉十六進位制
- C++實現任意進位制的相互轉換C++
- Go語言實現十進位制轉換成二、八、十六進位制Go
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- [20190716]十進位制轉換其他進位制指令碼.txt指令碼
- 二進位制、十進位制與十六進位制相互轉化
- Python 十進位制轉換為二進位制 高位補零Python
- 二進位制轉十進位制快速方法
- 資料結構–進位制(任意)轉換資料結構
- 十進位制轉二進位制推導(草稿)
- 進位制轉換
- Java實現BCD編碼與十進位制轉換Java
- 進位制與二進位制及相關轉換
- C++實現進位制轉換工具C++
- JavaScript 進位制轉換JavaScript
- 【python】進位制轉換Python
- 進位制的轉換
- 十進位制——二 (八、十六 )進位制
- 3416:【例72.1】 二進位制轉化為十進位制
- 口算 16 進位制轉換 10 進位制,但只適合兩位的 16 進位制
- 進位制數轉換方法(八/十六/十)
- 什麼是二進位制?二進位制如何轉換?
- JavaScript中的多種進位制與進位制轉換JavaScript
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 進位制轉換圖解圖解