順序棧ADT實現進位制轉換
/*
* Created by Microsoft Visual Studio 2013
* @author: Teresa
* @date: 2017-10-06
* @description: 順序棧操作
*/
#include <stdio.h>
#include <stdlib.h>
/*函式狀態碼*/
#define TRUE 1 //成功
#define OK 1
#define FALSE 0 //失敗
#define ERROR 0 //錯誤
#define INFEASIBLE -1 //不可行的
#define OVERFLOW -2 //溢位
#define STACK_INIT_SIZE 100 //儲存空間初試分配量
#define STACKINCREMENT 10 //儲存空間分配增量
typedef int SElemType; //基本資料型別
typedef int Status; //函式的返回值型別
/*棧的順序儲存表示*/
typedef struct
{
SElemType *base; //棧底指標,始終指向棧底,如果為null說明棧不存在
SElemType *top; //棧頂指標,當top == base時,為空棧;
int stackSize; //當前已分配的儲存空間,以元素為單位
}SqStack;
//top-base為當前棧中的元素個數
//構造一個空棧
Status InitStack(SqStack &S){
S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if (!S.base)
exit(ERROR);
S.top = S.base; //棧頂指向棧底
S.stackSize = STACK_INIT_SIZE;
return OK;
}
//銷燬棧S
Status DestroyStack(SqStack &S){
free(S.base); //釋放棧空間
S.top = S.base = NULL; //將棧頂和棧底置為NULL
S.stackSize = 0 ; //儲存空間置為0
return OK;
}
//把S置為空棧
Status ClearStack(SqStack &S){
S.top = S.base; //棧頂指向棧底
return OK;
}
//判斷S是否為空棧
Status StackEmpty(SqStack &S){
if (S.top == S.base)
return TRUE;
else
return FALSE;
}
//返回棧的元素個數 即棧的長度
int StackLength(SqStack S){
return S.top - S.base;
}
//若棧不為空 則e返回S的棧頂元素 並返回OK 否則ERROR
Status GetTop(SqStack S, SElemType &e){
if (S.top > S.base){
e = *(S.top - 1);
return OK;
}
else
return ERROR;
}
//插入e為新的棧頂元素
Status Push(SqStack &S, SElemType e){
if (S.top - S.base == S.stackSize){
//棧滿 追加儲存空間
S.base = (SElemType*)realloc(S.base, (S.stackSize + STACKINCREMENT)*sizeof(SElemType));
if (!S.base)
exit(ERROR);
S.top = S.base + S.stackSize; //修改棧頂指標
S.stackSize += STACKINCREMENT; //更新容量
}
*(S.top++) = e;
return OK;
}
//若棧不為空 則刪除S的棧頂元素 用e返回其值 並返回OK 否則返回ERROR
Status Pop(SqStack &S, SElemType &e){
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
//從棧底到棧頂依次對每個元素呼叫函式visit
Status StackTraverse(SqStack S, Status(*visit)(SElemType)){
while (S.top > S.base){
visit(*(S.base++));
}
printf("\n");
return OK;
}
//進位制轉換
int main(){
SqStack S;
SElemType e;
int n,m;
InitStack(S);
printf("請輸入要轉換的進位制 n>0\n");
scanf("%d", &n);
printf("請輸入要進行進位制轉換的十進位制數\n");
scanf("%d", &m);
while (m){
Push(S, m%n);
m = m / n;
}
printf("結果是\n");
while (!StackEmpty(S)){
Pop(S, e);
printf("%d", e);
}
printf("\n");
return 0;
}
相關推薦
順序棧ADT實現進位制轉換
/* * Created by Microsoft Visual Studio 2013 * @author: Teresa * @date: 2017-10-06 * @description: 順序棧操作 */ #include <stdio.h&g
【順序棧】SDUT2131 進位制轉換
Problem Description 輸入一個十進位制非負整數,將其轉換成對應的 R (2 <= R <= 9) 進位制數,並輸出。 Input 第一行輸入需要轉換的十進位制非負整數; 第二行輸入 R。 Output 輸出轉換所得的 R 進位制數。
C語言棧的實現進位制轉換
棧是限定僅在表尾進行操作的線性表。因此,對棧來說,表尾端有其特殊含義,成為棧頂,相應地,表頭端稱為棧底。 下面用C實現棧的基本操作以及利用棧來實現一個進位制轉換程式 #include <
C++標準庫之棧(Stack)實現進位制轉換
#include <iostream> #include <stack> using namespace std; int main() { int b,n,e; cout
鏈棧實現進位制轉換(2-16)
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include <math.h> #de
資料結構實驗之棧一:進位制轉換(java實現)
資料結構實驗之棧一:進位制轉換 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 輸入一個十進位制整數,將其轉換成對應
《資料結構》嚴蔚敏 用棧實現進位制轉換
基本思想很簡單 原數:N N = (N div d) X d + N mod d //Order Stack //apply of stack --- conversion of number systems #include<stdio.h> #include<s
使用棧實現進位制轉換(java大數進位制轉換)
Problem A: 使用棧實現進位制轉換 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 35 Solved: 19 [Submit][Status][Web Board] Description 使用棧將一個很
使用遞迴實現進位制轉換
要求:十進位制轉八進位制 //其它進位制的話只需做下稍微的修改 #include <iostream> using namespace std; int fun(int x) { if(x<8) return x; return x%8+10*fun(x/8); }
C語言實現進位制轉換
基本功能: 1、十進位制轉換二進位制 2、十進位制轉換八進位制 3、十進位制轉換十六進位制 4、二進位制轉換十進位制 5、八進位制轉換十進位制 6、十六進位制轉換十進位制 0、 退 出 程式碼實現: #include<
考研資料結構與演算法之堆疊的使用(二)利用堆疊實現進位制轉換
將十進位制的數字轉換成各種不同的進位制,這裡以八進位制為例,其實就是不斷的除以八然後取餘數,雖然用陣列也不難實現,但是顯然棧的後進先出的特性使得更容易理解了,具體實現方法如下: int main(void) { SqStack S; InitStack(S);
資料結構用順序棧實現R進位制轉換
#include<stdio.h> #define MAXSIZE 500 typedef struct{ int *base; int *top; int stacksize; }Sqstack; int Initstack(Sqstack &S)
【資料結構作業三】利用棧(以順序棧作儲存結構)實現二、十和十六進位制轉換
#include <iostream> #define MAXSIZE 100 using namespace std; typedef int SElemType; typedef struct { SElemType *base; SElemType
利用棧實現進位制的轉換!
問題:將十進位制數轉換為任意進位制數(2,8,16...). 演算法:假如N為輸入的數,n為要轉換為的進位制,若要將十進位制231轉換為8進位制數,過程如下; N
資料結構 棧的應用任意進位制轉換(c語言實現)
#include "stdlib.h" #include "stdio.h" typedef struct Stack{ int *base; int *top; int stacksize;
實驗4:棧和佇列的基本操作實現及其應用之《進位制轉換》
#include "SeqStack.h" template SeqStack::SeqStack() { top = -1; } template void SeqStack::Push(DataType x) { if (top == StackSize - 1)throw"上溢"; top++;
實驗4:棧和佇列的基本操作實現及其應用——進位制轉換以及實驗總結
一、實驗目的 1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、 學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。 分別建
Python內建進位制轉換函式(實現16進位制和ASCII轉換)
在進行wireshark抓包時你會發現底端視窗報文內容左邊是十六進位制數字,右邊是每兩個十六進位制轉換的ASCII字元,這裡使用Python程式碼實現一個十六進位制和ASCII的轉換方法。 hex() 轉換一個整數物件為十六進位制的字串 >>> hex(16) '0x10' >&
[Python程式設計]常用進位制轉換的程式碼實現
二進位制轉十進位制 def bin_to_dec(bin_str): bin = [int(n) for n in bin_str ] dec = [bin[-i - 1] * math.pow(2, i) for i in range(len(bin))] re
任意進位制轉換(佇列實現儲存和輸出)
#include <stdio.h> #include <stdlib.h> #define maxsize 1000000 **//定義佇列** typedef struct { char c[maxsize]; int top; }seqstack