实验4 栈与字符串
1、利用顺序栈结构,编写算法函数void Dto16(unsigned int m)实现十进制无符号整数m到十六进制数的转换功能。
#include "seqstack.h"
void Dto16(int m)
{
seqstack s;
init(&s);
printf("十进制数%u对应的十六进制数是:",m);
while (m)
{
push(&s,m%16);
m/=16;
}
while (!empty(&s))
putchar( read(&s)<10? pop(&s)+48: pop(&s)+55 );
printf("\n");
}
int main()
{
int m;
printf("请输入待转换的十进制数:\n");
scanf("%u",&m);
Dto16(m);
return 0;
}
2、利用链式栈结构,编写算法函数void Dto16(unsigned int m)实现十进制无符号整数m到十六进制数的转换功能。
#include "linkstack.h"
void Dto16(unsigned int m)
{
linkstack s;
s=init();
printf("十进制数%u对应的十六进制数是:",m);
while (m)
{
s=push(s,m%16);
m/=16;
}
while (!empty(s))
{
printf("%x", read(s));
s=pop(s);
}
printf("\n");
}
int main()
{
unsigned int m;
printf("请输入待转换的十进制数:\n");
scanf("%u",&m);
Dto16(m);
return 0;
}
3、利用字符顺序栈,设计并实现算术表达式求值的程序。
#include <stdio.h>
#include "stack.h"
int is_op(char op)
{
switch(op)
{
case '+':
case '-':
case '*':
case '/':return 1;
default:return 0;
}
}
int priority(char op)
{
switch(op)
{
case '(':return 0;
case '+':
case '-':return 1;
case '*':
case '/':return 2;
default: return -1;
}
}
void postfix(char e[],char f[])
{
seqstack opst;
int i,j;
initstack(&opst);
push(&opst,'\0');
i=j=0;
while (e[i]!='\0')
{
if ((e[i]>='0' && e[i]<='9') || e[i]=='.')
f[j++]=e[i