#include#define MAX_DATA_STRING_LENGTH 25
typedef char ElemType;
/*
采取链表的数据结构实现
栈,可实现二至十六进制
至二至十六进制的数据的
转换,稍加扩展即可实现
任意进制的数据的转换.
any question,please contact me:
askme163@http://www.doczj.com/doc/fa5493aed1f34693daef3ebb.html
*/
//链栈结构定义
struct stack{
ElemType data;
struct stack *next;
};
//初始化栈,栈首节点不存储数据
void initStack(struct stack *&s)
{
s=(struct stack *)malloc(sizeof(struct stack));
s->next=NULL;
}
//压栈操作
bool push(struct stack *&s,ElemType e)
{
struct stack *p=(struct stack *)malloc(sizeof(struct stack));
if(p==NULL)
return false;
p->data=e;
p->next=NULL;
struct stack *t=s;
while(t->next!=NULL)
t=t->next;
t->next=p;
return true;
}
//出栈操作
bool pop(struct stack *&s,ElemType &e)
{
struct stack *p=s;
struct stack *pre;
if(p->next==NULL)
return false;
while(p->next!=NULL)
{
pre=p;
p=p->next;
}
e=p->data;
free(p);
pre->next=NULL;
return true;
}
//销毁栈
void destoryStack(struct stack *&s)
{
struct stack *p=s;
s=s->next;
while(p->next!=NULL)
{
free(p);
p=s;
s=s->next;
}
free(p);
}
//根据字母匹配相应的字母,例如10应匹配A
int matchNum(char ch)
{
switch(ch)
{
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case 'A': return 10;
case 'B': return 11;
case 'C': return 12;
case 'D': return 13;
case 'E': return 14;
case 'F': return 15;
default: return -1;
}
}
//根据数字匹配字母,例如10匹配成A
char matchChar(int num)
{
switch(num)
{
case 0: return '0';
case 1: return '1';
case 2: return '2';
case 3: return '3';
case 4: return '4';
case 5: return '5';
case 6: return '6';
case 7: return '7';
case 8: return '8';
case 9: return '9';
case 10: return 'A';
case 11: return 'B';
case 12: return 'C';
case 13: return 'D';
case 14: return 'E';
case 15: return 'F';
default: return '#';
}
}
//判断输入初始数字串是否合法
bool isLegalString(char *str,int orgBin)
{
char chArray[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int i=0;
while(str[i]!='#')
{
int j=0;
while(j{
if(chArray[j]==str[i])
break;
else
j++;
}
if(j==orgBin)
return false;
else
i++;
}
return true;
}
//返回数字串的长度
int length(char *str)
{
int i=0;
while(str[i]!='#')
i++;
return i;
}
void main()
{
int temp;
struct stack *s;
int orgBin;
char *dataString=(char*)malloc(MAX_DATA_STRING_LENGTH