目录
顺序栈
#include<stdio.h>
#include<malloc.h>
#include<windows.h>
#define MAXSIZE 30
typedef int datatype;
typedef struct
{
datatype top;
datatype data[MAXSIZE];
} SeqStack;
SeqStack *Init_SeqStack(){
SeqStack *S;
S=(SeqStack*)malloc(sizeof(SeqStack));
S->top=-1;
}
int Push_SeqStack(SeqStack *S,int N){
if(S->top==MAXSIZE-1){
printf("栈满");
return 1;
}
S->top++;
S->data[S->top]=N;
return 0;
}
int Empt_SeqStack(SeqStack *S){
if(S->top==-1){
return 1;
}else{
return 0;
}
}
void Pop_SeqStack(SeqStack *S,datatype *X){
*X=S->data[S->top];
S->top--;
}
void Comversion(int N,int r)
{ SeqStack *S;
datatype x;
S=Init_SeqStack();
while(N)
{
Push_SeqStack(S,N%r);
N=N/r;
}
while(!Empt_SeqStack(S))
{
Pop_SeqStack(S,&x);
if(x>=10)
printf("%c",x+55);
else
printf("%d",x);
}
printf("\n");
}
int main(){
int N,r;
while(1){
printf("请输入要转化的十进制数");
scanf("%d",&N);
printf("2:转换为二进制\n");
printf("8:转换为八进制\n");
printf("16:转换为十六进制\n");
printf("0:清屏");
scanf("%d",&r);
switch(r){
case 2:Comversion( N, r);break;
case 8:Comversion( N, r);break;
case 16:Comversion( N, r);break;
case 0:system("cls");break;
default : printf("请重新输入\n");break;
}
}
return 0;
}
链栈
#include<stdio.h>
#include<malloc.h>
#include<windows.h>
typedef int datatype;
typedef struct LinkNode{
datatype data;
struct LinkNode *next;
} StackNode, *LinkStack ;
LinkStack Init_LinkStack(){
LinkStack S;
S=(LinkStack)malloc(sizeof(StackNode));
S->next=NULL;
}
LinkStack Push_LinkStack(LinkStack S,int N){
LinkStack p;
p=(LinkStack)malloc(sizeof(StackNode));
p->data=N;
p->next=S->next;
S->next=p;
return S;
}
LinkStack Pop_LinkStack(LinkStack S,datatype *x){
LinkStack p;
p=S->next;
*x=p->data;
S->next=p->next;
free(p);
return S;
}
bool Empt_LinkStack(LinkStack S){
if (S->next == NULL){
return true;
}else{
return false;
}
}
void ComversionLink(int N,int r)
{ LinkStack S;
datatype x;
S=Init_LinkStack();
while(N)
{
S=Push_LinkStack(S,N%r);
N=N/r;
}
while(!Empt_LinkStack(S))
{ S=Pop_LinkStack(S,&x);
if(x>=10)
printf("%c",x+55);
else
printf("%d",x);
}
printf("\n");
}
int main(){
int N,r;
while(1){
printf("请输入要转化的十进制数");
scanf("%d",&N);
printf("2:转换为二进制\n");
printf("8:转换为八进制\n");
printf("16:转换为十六进制\n");
printf("0:清屏");
scanf("%d",&r);
switch(r){
case 2:ComversionLink( N, r);break;
case 8:ComversionLink( N, r);break;
case 16:ComversionLink( N, r);break;
case 0:system("cls");break;
default : printf("请重新输入\n");break;
}
}
return 0;
}