清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#include<stdio.h> #include<stdlib.h> typedef int SElemType ; unsigned n;//非负整数 int N; #define OK 1 #define ERROR 0 #define OVERFLOW 0 #define STACKINCREMENT 1 #define STACK_INIT_SIZE 10 typedef int Status; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; //此处需引入顺序栈存储结构及其基本操作 Status InitStack(SqStack &S) { //为栈分配一个指定大小的存储空间 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) return ERROR;//存储分配失败 S.top=S.base;//栈底与栈顶相同表示一个空栈 S.stacksize=STACK_INIT_SIZE; return OK; } Status StackEmpty(SqStack S) { //若栈S为空栈(栈顶与栈底相同),则返回OK,否则返回ERROR if(S.top==S.base) return OK; else return ERROR; } Status Push(SqStack &S,SElemType e) { //插入元素e为新的栈顶元素 if(S.top-S.base>=S.stacksize)//栈满,追加存储空间 { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) return ERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e;//这个等式的++*优先级相同,但是它们的运算方式,是自右向左 return OK; } Status GetTop(SqStack S,SElemType *e) { if(S.base<S.top) { *e=*(S.top-1); return OK; } else return ERROR; } Status Pop(SqStack &S,SElemType &b) { //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR if(S.top==S.base) return ERROR; b = * --S.top;//这个等式的--*优先级相同,但是它们的运算方式,是自右向左 return OK; } Status StackTraverse(SqStack S,int(*visit)(SElemType)) { while(S.top>S.base) { visit(*S.base); S.base++; } printf("\n"); return OK; } Status visit(SElemType c) { printf("%d", c); return OK; } void conversion() { //对于输入任意一个非负十进制整数,打印输出与其等值的N进制数 SqStack s; SElemType e; InitStack(s);//初始化栈 while(n)//当n不等于0 { Push(s,n%N);//压入n除以N的余数(N进制的低位) n=n/N; } printf("转换后的数值为:"); while(!StackEmpty(s)) { Pop(s,e);//弹出栈顶元素且赋值给e printf("%d",e); } printf("\n"); } void main() { int y; char c; printf(" 1.输入一个十进制数n\n 2.输入转换的进制m\n 3.进制转换 \n 4.继续否?(y/n?)\n"); while(1) { printf("请选择1-4\n"); scanf("%d",&y); if(y==1) { printf("输入一个十进制数\n"); scanf("%d", &n); }else if(y==2) { printf("输入转换的进制\n"); scanf("%d", &N); }else if(y==3) { printf("进制转换\n"); conversion(); }else if(y==4) { printf("请输入y or Y to continue or n or N to quit\n"); scanf("%c",&c); if(c == 'n' || c == 'N') break; } else { printf("无效字符\n"); } } }