1 进制转换
1.1 利用栈的特点,将用户输入的十进制数转换为二进制数。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define M 100
typedef int datatype;
typedef struct {
datatype data[M];
int top;
}seqstack;
void InitStack(seqstack *s){
s->top=-1 ;
}
int StackEmpty(seqstack *s){
if (s->top>=0 ) return 1 ;
else return 0 ;
}
seqstack *push(seqstack *s,datatype x){
if (s->top==M-1 ) return NULL;
else
{
s->top++;
s->data[s->top]=x;
}
return s;
}
datatype pop(seqstack *s){
datatype x;
x=s->data[s->top];
s->top--;
return x;
}
void main(){
seqstack *s;
datatype n,e;
int i=0 ,j=0 ;
scanf ("%u" ,&n);
s=(struct seqstack*)malloc (sizeof (int ));
if (s==NULL) exit (0 );
InitStack(s);
while (n)
{
push(s,n%2 );
i++;
n=n/2 ;
}
while (j<i)
{
j++;
e=pop(s);
printf ("%d" ,e);
}
printf ("\n" );
system("pause" );
}
1.2 利用栈的特点,将用户输入的十进制数转换为八进制数。
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACKINCREMENT 10
#define STACK_INIT_SIZE 100
typedef int Status;
typedef int SElemType;
typedef struct {
SElemType *top;
SElemType *base ;
int stacksize;
}Sqstack;
Status InitStack(Sqstack &S){
S.base =(SElemType *)malloc(STACK_INIT_SIZE *sizeof (Sqstack));
if (!S.base ) exit(OVERFLOW);
S.top=S.base ;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(Sqstack &S,SElemType e){
if (S.top-S.base >=S.stacksize)
S.base =(SElemType *)realloc(S.base ,(STACK_INIT_SIZE+STACKINCREMENT) *sizeof (Sqstack));
if (!S.base ) exit (OVERFLOW);
S.stacksize+=STACKINCREMENT;
*S.top++=e;
return OK;
}
int Pop(Sqstack &S,SElemType &e){
if (S.top==S.base ) return ERROR;
e=*--S.top;
return e;
}
Status Stackempty(Sqstack S){
if (S.top==S.base ) return TRUE;
else return FALSE;
}
void main()
{
int a,n,e,d;Sqstack S;
InitStack(S);
printf("请输入一个十进制整数:" );
scanf("%d" ,&a);
while (a)
{
n=a%8 ;
Push(S,n);
a=a/8 ;
}
printf("该数字对应的八进制为:" );
while (!Stackempty(S))
{
d=Pop(S,e);
printf("%o" ,d);
}
printf("\n" );
}
1.3 利用栈的特点,将用户输入的二进制数转换为十进制数。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 20
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType data[MAXSIZE];
int top;
}Sqstack;
Status InitSqstack(Sqstack * S)
{
S->top=-1 ;
return OK;
}
Status Push(Sqstack * S,SElemType e)
{
if (S->top==MAXSIZE-1 )
{
return ERROR;
}
S->top++;
S->data[S->top]=e;
return OK;
}
Status Pop(Sqstack * S,SElemType * e)
{
if (S->top==-1 )
{
return ERROR;
}
*e=S->data[S->top];
S->top--;
return OK;
}
Status Create(Sqstack * S,int n)
{
SElemType Number;
for (int i=0 ;i<n;i++)
{
scanf ("%d" ,&Number);
Push(S,Number);
}
return OK;
}
Status Change(Sqstack * S,int n)
{
SElemType Number,result;
SElemType Sum=0 ;
for (int i=0 ;i<n;i++)
{
Pop(S,&Number);
if (i==0 )
{
result=Number*1 ;
}
else
{
for (int j=0 ;j<i;j++)
Number=Number*2 ;
result=Number;
}
Sum=result+Sum;
}
return Sum;
}
int main()
{
Sqstack S;
int ElemNumber;
int NewElem;
InitSqstack(&S);
printf ("请输入元素个数:\n" );
scanf ("%d" ,&ElemNumber);
printf ("请输入二进制数:\n" );
Create(&S,ElemNumber);
SElemType result=Change(&S,ElemNumber);
printf ("转为十进制后的结果是:\n" );
printf ("%d\n" ,result);
return 0 ;
}