内容:
将十进制有理数num转换为r进制数,其转换方法为辗转相除法。要求用链栈实现。
步骤:
- 算法分析
程序中设计了四个函数:
函数InitStack()用来初始化一个顺序栈
函数Empty()用来实现栈的判空操作
函数Pop()用来实现元素的出栈操作
函数Convert()用来实现数制转换算法
数值转换问题需要用到栈的基本操作,程序中用三个函数分别实现链栈的入栈,判断栈空和出栈操作。主函数有两个输入,即输入待转化的数和要转化的进制,函数Covert算法思想是利用算数运算中的取余和取整的操作,借助于栈的操作,进行辗转相除来实现。
2.源代码
#include#include #include #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.效果图
整数 小数



