内容:
将十进制有理数num转换为r进制数,其转换方法为辗转相除法。要求用链栈实现。
步骤:
- 算法分析
?????程序中设计了四个函数:
?????函数InitStack()用来初始化一个顺序栈
?????函数Empty()用来实现栈的判空操作
?????函数Pop()用来实现元素的出栈操作
?????函数Convert()用来实现数制转换算法
?????数值转换问题需要用到栈的基本操作,程序中用三个函数分别实现链栈的入栈,判断栈空和出栈操作。主函数有两个输入,即输入待转化的数和要转化的进制,函数Covert算法思想是利用算数运算中的取余和取整的操作,借助于栈的操作,进行辗转相除来实现。
? ? 2.源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define StackSize 100
typedef char DataType;
typedef struct {
DataType data[StackSize];
int top;
}SeqStack;
int Init_SeqStack(SeqStack*& S)
{
S = (SeqStack*)malloc(sizeof(SeqStack));//申请空间
if (S == NULL)
{
printf("申请分配空间失败\n");
return 0; //失败返回0
}
S->top = -1; //将-1赋值给栈顶指针
return 1;
}
int IsHuiwen(char* t)
{
int i, b, len;
SeqStack* S;
Init_SeqStack(S);
char temp;
len = strlen(t);
for (i = 0; i < len / 2; i++)
{
if (S->top < StackSize - 1)
S->data[++S->top] = t[i];
else
{
printf("栈满溢出");
exit;
}
if (len % 2 == 1)i++;
while (S->top > -1)
{
temp = S->data[S->top--];
if (temp != t[i])
return 0;
else
i++;
}
return 1;
}
}
int main()
{
printf("请输入需要判断的字符串\n");
DataType data[StackSize];
scanf_s("%c", data);
if (IsHuiwen(data))
{
printf("该字符串是回文\n");
}
else //否则执行printf("该字符串不是回文\n");
{
printf("该字符串不是回文\n");
}
return 0;
}
3.流程图
4.效果图
整数??小数
?
?
|