1. 程式人生 > >順序棧ADT實現進位制轉換

順序棧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