数据结构C语言版(李云清)实验4 栈与字符串

实验4 栈与字符串


1、利用顺序栈结构,编写算法函数void Dto16(unsigned int m)实现十进制无符号整数m到十六进制数的转换功能。

/**********************************/
/*文件名称:lab4_01.c                 */
/**********************************/
#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到十六进制数的转换功能。

/**********************************/
/*文件名称:lab4_02.c                 */
/**********************************/
#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
  • 17
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值