SWUST软件技术基础实验(1)栈的实现和应用(修订版)

修订日志:
听说因为电脑关机要打复活赛?
加强版代码已上线
增加conversion2()函数
此函数的功能能将任意十进制数转化为任意进制数
特殊 判断取余得到的数大于等于10时用’A’+x-10
修订日志2.0:
增加任意进制转化任意进制 实质上是将任意进制先转化为十进制 再进行转换
修订日志3.0:
复活成功代码 同时修正代码中的小错误

实验目的:
1.掌握栈的定义。
2.掌握栈基本操作的实现,并能用于解决实际问题。
实验内容:
1.实现栈的如下基本操作:push,pop,isempty,isfull,createstack。
2.利用栈的基本操作实现conversion()函数,该函数能将任意输入的十进制整数转化为二进制形式表示。
实验要求:
1.用顺序存储结构实现栈的基本操作:push,pop,isempty,isfull,createstack。
2.利用栈的基本操作实现conversion()函数。
3.编写主函数完成实验内容2。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
const int maxsize=1024;
using namespace std;
typedef int datatype;
//结构体功能:规定栈的大小和栈顶
typedef struct {
    datatype elements[maxsize];
    int Top;
}Stack;
//函数功能:创建空栈
void setStack(Stack* S){
    S->Top=-1;
}
//函数功能:判满
int isfull(Stack* S){
    if(S->Top>=maxsize-1)
        return 1;
    else
        return 0;
}
//函数功能:判空
int isempty(Stack* S){
    if(S->Top<0)
        return 1;
    else
        return 0;
}
//函数功能:压栈
void push(Stack* S,datatype E){
    if(isfull(S))
        printf("Stack Overflow\n");
    else{
        S->Top++;
        S->elements[S->Top]=E;
    }
}
//函数功能:出栈
datatype* pop(Stack* S){
    datatype* key;
    if(isempty(S)){
        printf("Stack Underflow\n");
        return NULL;
    }
    else{
        key=(datatype*)malloc(sizeof(datatype));
        * key =S->elements[S->Top];
        S->Top--;
        return key;
    }
}
//函数功能:十进制整数转化为二进制数
void conversion(int n){
    Stack S;
    setStack(&S);
    int r,m;
    r=n;
    while(r){
        m=r%2;
        if(isfull(&S))
            printf("Over flow\n");
        else
            push(&S,m);
        r=r/2;
    }
    printf("转换后的二进制为:\n");
    while(!isempty(&S)){
        printf("%d",*(pop(&S)));
    }
    printf("\n");
}
void conversion2(int n,int r){
    Stack S;
    int x;
    setStack(&S);
    int f=n;
    while(f){
        if(isfull(&S))
            printf("Over flow\n");
        else
            push(&S,f%r);
            f/=r;
    }
    printf("数据%d转化为%d进制后的结果为:",n,r);
    while(!isempty(&S)){
        x=*(pop(&S));
        if(x>=10){
            printf("%c",'A'+x-10);
        }
        else{
            printf("%d",x);
        }
    }
    printf("\n");
}
int main(){
    int num;
    printf("请输入需要转换为二进制的十进制数据:\n");
    scanf("%d",&num);
    conversion(num);
    int n,r;
    printf("请输入转化的数字和进制:\n");
    scanf("%d%d",&n,&r);
    conversion2(n,r);
    double mu;
    int nu;
    printf("请输入m进制转化为n进制中m和n:\n");
    scanf("%lf%d",&mu,&nu);
    printf("请输入需要转换的数据:\n");
    char arra[1024];
    scanf("%s",arra);
    int s=strlen(arra);
    int sum=0;
    double j=0;
    for(int i=s-1;i>=0;i--){
        sum+=(arra[i]-'0')*pow(mu,j);
        j++;
    }
    conversion2(sum,nu);
    return 0;
}

发布了48 篇原创文章 · 获赞 46 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42926870/article/details/103039845