當前位置:首頁 » 編程語言 » 利用棧實現數據的轉換c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

利用棧實現數據的轉換c語言

發布時間: 2022-04-20 07:28:36

❶ 用c語言棧實現進制轉換,十進制轉成2,8,16,2,8,16轉成十進制,

Problem Description
輸入一個十進制數N,將它轉換成R進制數輸出。
Input
輸入數據包含多個測試實例,每個測試實例包含兩個整數N(32位整數)和R(2<=R<=16, R<>10)。
Output
為每個測試實例輸出轉換後的數,每個輸出佔一行。如果R大於10,則對應的數字規則參考16進制(比如,10用A表示,等等)。
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11

#include<stdio.h>
#include<string.h>
int main()
{
int R,a,i;
long n;
char b[10000];
while(scanf("%d %d",&n,&R)!=EOF)
{
if(n==0)
printf("0\n");
if(n==1)
printf("1\n");
if(n==-1)
printf("-1\n");
if(n>1||n<-1)
{
if(n<0)
printf("-");
n=n>0?n:-n;
i=0;
while(n>0)
{
a=n%R;
n=n/R;
if(a>=10)
b[i]='A'+a-10;
else
b[i]='0'+a;
i++;
}
b[i]='\0';
for(i=strlen(b)-1;i>=0;i--)
printf("%c",b[i]);
printf("\n");
}
}
return 0;
}

❷ 求利用棧把一個10進制數轉換城16進制數(c語言)的程序

運行示例:
輸入:100000
輸出:186a0
程序源碼如下:
#include
<stdio.h>
#include
<stdlib.h>
#define
MAX
100
int
stack[MAX];
int
top
=
0;
int
push(int
*stack,
int
*top,
int
x)
{
if
(*top
==
MAX)
return
0;
stack[(*top)++]
=
x;
return
1;
}
int
pop(int
*stack,
int
*top,
int
*x)
{
if
(*top
==
0)
return
0;
*x
=
stack[--(*top)];
return
1;
}
int
empty(int
*stack,
int
top)
{
return
top
==
0;
}
int
main()
{
unsigned
num
=
0;
scanf("%u",
&num);
while
(num)
{
push(stack,
&top,
num
%
16);
num
/=
16;
}
if
(empty(stack,
top))
push(stack,
&top,
0);
while
(!empty(stack,
top))
{
int
digit
=
0;
pop(stack,
&top,
&digit);
if
(digit
<
10)
printf("%c",
'0'
+
digit);
else
printf("%c",
'a'
+
(digit
-
10));
}
printf("\n");
return
0;
}

❸ 用C語言寫出用數據結構中用棧實現進制間的轉換

十進制換二進制,八進制,十六進制 #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LISTINCREMENT 10 #define INFEASIBLE -1 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int SElemType; typedef int Status; typedef int ElemType; typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; SqStack S; Status InitStack(); Status Push(SElemType e); Status Pop(SElemType *e); Status StackEmpty(); void main() { char *b="0123456789ABCDEF"; int n,N,M,L,e; SqStack S; InitStack(); printf("請輸入要轉換的數字:"); scanf("%d",&n); N=M=L=n; while(N) { Push(N % 8); N = N / 8; } printf("轉換為八進制數為:"); while(!StackEmpty()) { Pop(&e); printf("%d",e); } printf("\n"); while(M) { Push(M % 2); M = M / 2; } printf("轉換為二進制數為:"); while(!StackEmpty()) { Pop(&e); printf("%d",e); } printf("\n"); while(L) { Push(L % 16); L = L / 16; } printf("轉換為十六進制數為:"); while(!StackEmpty()) { Pop(&e); printf("%c", b[e]); } printf("\n"); getch(); } Status InitStack() { S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top = S.base; S.stacksize=STACK_INIT_SIZE; return OK; } Status Pop(SElemType *e) { if(S.top == S.base) return ERROR; *e = *--S.top; return OK; } Status Push(SElemType e) { if(S.top - S.base >= S.stacksize) { S.base = (ElemType *)realloc(S.base,(S.stacksize + LISTINCREMENT) * sizeof(ElemType)); if(!S.base) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; return OK; } Status StackEmpty() { if(S.top == S.base) return OK; else return ERROR; }

❹ 數據結構中用C語言寫:利用棧實現十進制數 N和其它 d進制數的轉換。

工具/材料:以Microsoft Visual Studio 2010為例。

1、首先在桌面上,點擊「Microsoft Visual Studio 2010」圖標。

❺ 數據結構 棧 進制轉換,用C語言描述

#include<stdio.h>
#include<stdlib.h>
#defineOK1
#defineERROR-1
#defineOVERFLOW-2
#defineSTACK_INIT_SIZE50
#defineSTACKINCREMENT10


typedefintSElemType;
typedefintStatus;
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;

StatusInitStack(SqStack&S)
{//構建一個空棧
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);//存儲分配失敗
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}

StatusDestroyStack(SqStack&S)
{if(!S.base)returnERROR;//若棧未建立(尚未分配棧空間)
free(S.base);//回收棧空間
S.base=S.top=NULL;
S.stacksize=0;
returnOK;
}//DetroyStack


StatusPush(SqStack&S,chare)
{//插入元素e為新的棧頂元素
if(S.top-S.base>=S.stacksize){//棧滿,追加存儲空間
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)returnOVERFLOW;//存儲分配失敗
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
returnOK;
}//Push

StatusPop(SqStack&S,char&e)
{//若棧不空,則刪除S的棧頂元素
//用e返回其值,並返回OK;否則返回ERROR
if(S.top==S.base)returnERROR;
e=*(--S.top);
returnOK;
}//Pop

Statustwo()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空棧
printf("請輸入一個十進制正整數: ");//該函數未檢查是否為正數和整數
scanf("%d",&n);
printf("的2進制是:");
while(n)
{
Push(S,n%2);//N/2餘數進棧
n=n/2;//整除運算
}
while(S.top!=S.base){
Pop(S,e);
printf("%d",e);
}
printf(" ");
DestroyStack(S);
}

Statuseight()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空棧
printf("請輸入一個十進制正整數: ");
scanf("%d",&n);
printf("的8進制是:");
while(n)
{
Push(S,n%8);//N/8餘數進棧
n=n/8;//整除運算
}
while(S.top!=S.base){
Pop(S,e);
printf("%d",e);
}
printf(" ");
DestroyStack(S);
}

Statussixteen()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空棧
printf("請輸入一個十進制正整數: ");
scanf("%d",&n);
printf("的16進制是:");
while(n)
{e=n%16;
If(e==0)e='0';
if(e==1)e='1';
if(e==2)e='2';
if(e==3)e='3';
if(e==4)e='4';
if(e==5)e='5';
if(e==6)e='6';
if(e==7)e='7';
if(e==8)e='8';
if(e==9)e='9';
if(e==10)e='A';
if(e==11)e='B';
if(e==12)e='C';
if(e==13)e='D';
if(e==14)e='E';
if(e==15)e='F';
Push(S,e);//N/16餘數進棧
n=n/16;//整除運算
}
while(S.top!=S.base){
Pop(S,e);
printf("%s",&e);
}
printf(" ");
DestroyStack(S);
}

intmain()
{intflag;
intselect;
printf("主菜單 ");
printf("1.2進制 ");
printf("2.8進制 ");
printf("3.16進制 ");
printf("4.退出 ");

while(flag)
{printf("請選擇:");
scanf("%d",&select);
switch(select)
{
case1:
two();
break;

case2:
eight();
break;

case3:
sixteen();
break;

case4:
flag=0;
break;
}

}
}

❻ C語言 利用棧實現不同進制數之間的轉換。要求輸入一個十進制整數N,通過堆棧實現十進制整數到二進制數

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#defineelemTypeint /*鏈棧元素數據類型*/
#defineSNODE_SIZEsizeof(structsNode) /*鏈棧結點空間大小*/

#definestatusint /*狀態型變數*/
#defineOVERFLOW-1 /*內存溢出狀態碼*/
#defineERROR0 /*錯誤狀態碼*/
#defineOK1 /*正確狀態碼*/

/*鏈棧結點存儲結構*/
typedefstructsNode{
elemTypedata;
structsNode*next;
}sNode,*sNodePtr;

/*鏈棧存儲結構*/
typedefstructlinkStack{
sNodePtrtop;/*棧頂指針*/
}linkStack;

/*初始化*/
/*操作結果:構造一個帶頭結點的空鏈棧S*/
voidinitStack(linkStack*S){
S->top=(sNodePtr)malloc(SNODE_SIZE);/*產生頭結點,棧頂指針指向此頭結點*/
if(!S->top)/*內存分配失敗*/
exit(OVERFLOW);
S->top->next=NULL;
}

/*銷毀*/
/*初始條件:鏈棧S已存在。操作結果:銷毀鏈棧S*/
voiddestroyStack(linkStack*S){
sNodePtrp,q;

p=S->top;/*p指向S的頭結點*/
while(p){
q=p->next;/*q指向p的下一個結點*/
free(p);/*回收p指向的結點*/
p=q;/*p移動到下一個結點*/
}/*直到沒有下一個結點*/
}

/*判斷鏈棧是否為空*/
/*初始條件:鏈棧S已存在。操作結果:若S為空鏈棧,則返回TRUE,否則返回FALSE*/
statusstackIsEmpty(linkStack*S){
returnS->top->next==NULL;
}

/*入棧*/
/*操作結果:在S的棧頂插入新的元素e*/
statuspush(linkStack*S,elemTypee){
sNodePtrp;

p=(sNodePtr)malloc(SNODE_SIZE);/*產生新結點*/
if(!p)/*內存分配失敗*/
exit(OVERFLOW);

p->data=e;
p->next=S->top->next;/*將新結點鏈接到原棧頂*/
S->top->next=p;/*棧頂指向新結點*/
}

/*出棧*/
/*操作結果:刪除S的棧頂元素,並由e返回其值*/
statuspop(linkStack*S,elemType*e){
sNodePtrp;

if(stackIsEmpty(S))
returnERROR;

p=S->top->next;/*p指向鏈棧的第一個結點*/
*e=p->data;/*取出數據*/
S->top->next=p->next;
free(p);/*刪除該結點*/

if(S->top==p)/*棧為空*/
S->top->next=NULL;

returnOK;
}

intmain(void){
linkStackS;
elemTypee;
intN;

initStack(&S);

scanf("%d",&N);

/*除基數取余*/
while(N){
push(&S,N%2);
N/=2;
}

while(!stackIsEmpty(&S)){
pop(&S,&e);
printf("%d",e);
}

destroyStack(&S);

getch();/*屏幕暫留*/
return0;
}

如有問題,點擊頭像聯系我

❼ C語言中的棧實現進制轉換

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define MAXSIZE 100

typedef int DataType;
typedef struct{
DataType data[MAXSIZE];
int top;
}SeqStack,*PSeqStack;

PSeqStack Init_SeqStack(void)
{
PSeqStack S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return S;
}

int Push_SeqStack(PSeqStack S,DataType x)
{
if (S->top==MAXSIZE-1)
return 0;
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}

int Empty_SeqStack(PSeqStack S)
{
if(S->top==-1)
return 1;
else
return 0;
}

int Pop_SeqStack(PSeqStack S,DataType *x)
{
if(Empty_SeqStack(S))
return 0;
else
{
*x=S->data[S->top];
S->top--;
return -1;
}
}

void Destory_SeqStack(PSeqStack *S)
{
if(*S)
free(*S);
*S=NULL;
return;
}

typedef int DataType;
int conversation(int n,int r)
{
PSeqStack S;
DataType x;
if(!r)
{
printf("基數不能為0");
return(0);
}
S=Init_SeqStack();
if(!S)
{
printf("棧初始化失敗");
return(0);
}
while(n)
{
Push_SeqStack(S,n%r);
n=n/r;
}
while (!Empty_SeqStack(S))
{
Pop_SeqStack(S,&x);
printf("%d",x);
}
Destory_SeqStack(&S);
return 0;
}

void main()
{
int i,a;
printf("輸入要轉換的進制!!\n");
scanf("%d",&a);
printf("輸入要轉換的數!!\n");
scanf("%d",&i);
conversation(i,a);
}

❽ 用C語言實現棧的基本操作(數制的轉換)

//順序棧以及基本操作如下:

#include<iostream.h>
enum
{
MAX_SIZE=20
};

typedef struct
{
int* base;
int* top;
int stacksize;
}SqStack;

void InitStack(SqStack& S)
{
S.base=new int[MAX_SIZE];
S.top=S.base;
S.stacksize=MAX_SIZE;
}

bool Push(SqStack& S,int e)
{
if(S.top-S.base>=S.stacksize)
return false;
*S.top=e;
S.top++;
return true;
}

bool Pop(SqStack& S,int& e)
{
if(S.top==S.base)
return false;
S.top--;
e=*S.top;
return true;
}

void DestroyStack(SqStack& S)
{
if(S.base)
delete S.base;
S.top=S.base=NULL;
S.stacksize=0;
}

bool StackEmpty(SqStack S)
{
return (S.top==S.base);
}

void Print(SqStack S)
{
int i=0;

while(i<S.top-S.base)
{

cout<<S.base[i++]<<endl;
}
}

❾ C語言數據結構用棧寫的進制轉換~~~

我試過了,不是無法運行,是運行時出錯。你現在要單步調試,仔細檢查每一個指針和變數的值。練習單步調試運行時錯誤是提高你編程技術的好機會,直接答案你就失去了這個機會了。

建議:你的編程習慣不好,你應該給程序加上必要的調試信息,比如像這樣的:(多敲幾下鍵盤而已)
#ifdef _DEBUG
printf("Function:%s, Line: %d\n", __FUNCTION__, __LINE__); //若是gcc編譯器,請用__func__
#endif

這兩個都是系統默認的變數,__FUNCTION__是當前運行的函數, __LINE__是當前運行的行數
至少加在每個函數的開頭,這樣運行的時候就會告訴你這個程序在哪個函數的第幾行出錯了。

提示:我在pushstock函數里加了2個printf,運行的時候只打出來一個,現在知道錯誤在哪裡了把?

Status pushstock( SqStack &S, int num )
{
#ifdef _DEBUG
printf("Function:%s, Line: %d\n", __FUNCTION__, __LINE__); //若是gcc編譯器,請用__func__
#endif
if( S.top - S.base >= S.stocksize )
{
S.base = ( SElemType * )realloc( S.base,
sizeof(SElemType) * (STOCKINCREASE + S.stocksize) );
if( !S.base )
exit( 0 );
S.top = S.base + S.stocksize;
S.stocksize += STOCKINCREASE;
}
#ifdef _DEBUG
printf("Function:%s, Line: %d\n", __FUNCTION__, __LINE__); //若是gcc編譯器,請用__func__
#endif
* (S.top++) = num;
return OK;
}