栈的函数测试

#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
#define overflow -2
typedef struct
{
    int *base,*top;
    int stacksize;
}sqstack;

int initstack(sqstack *s)
{
    s->base=(int *)malloc(10*sizeof(int));                        //预先为s->base所指向的内存空间分配10个int类型的存储空间
    if(!s->base)return overflow;
    s->top=s->base;
    s->stacksize=10;
    return ok;
}

int gettop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    *e=*(s->top-1);
    return ok;
}

int pop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    s->top--;
    *e=*s->top;
    return ok;
}

int push(sqstack *s,int e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(int *)realloc(s->base,(s->stacksize+10)*sizeof(int));    //如果栈满,则再次给s->base所指向的内存空间分配10个int类型的存储空间
        if(!s->base)return overflow;
        s->top=s->base+s->stacksize;
        s->stacksize++;
    }
    *s->top=e;
    s->top++;
    return ok;
}

int getlength(sqstack *s)                 //获取栈的长度作为返回值
{
    int i;
    i=s->top-s->base;
    return i;
}

int convertion(int n)                             //传入一个十进制数n,返回值为n的八进制
{
    int k,t,l,m,sum;
    sqstack s;
    initstack(&s);
    do
    {
        k=n%8;
        push(&s,k);
        n/=8;
    }while(n!=0);
    l=getlength(&s);
    for(sum=0;l>0;l--)
    {
        sum*=10;                   //sum*10表示每进行一次循环小数点都向后移动一位,即先出栈的元素位权高
        pop(&s,&m);
        sum+=m;
    }
    return sum;
}

void main()
{
    int i,j;
    printf("请输入一个十进制数:");
    scanf("%d",&j);
    i=convertion(j);
    printf("十进制数%d的八进制为:%d\n",j,i);
}

程序运行结果如下:

可以发现,无论是正数还是负数程序都能进行转化。

原文地址:https://www.cnblogs.com/P201821440033/p/11827324.html

时间: 2024-11-13 09:50:30

栈的函数测试的相关文章

Linux上coredump调试:call stack栈顶函数地址为0 分析实战

这几天测试中,又收到了coredump的报告,调用栈如下: (gdb) bt#0  0x0000000000000000 in ?? ()#1  0x0000000000432bb4 in ChargingNode::canProcessed (this=0x7f87b40118e0, maxTimestamp=9000000000) at src/sl/ChargingFile.C:406#2  0x0000000000445de4 in BucketFileAdapter::checkin

I/O多路复用---epoll函数测试

参考文章来源: epoll使用详解(精髓) Epoll学习笔记 epoll是直到Linux2.6才出现了由内核直接支持的实现方法,那就是epoll,它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法. epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高一些,但是代码实现相当复杂. epol

经典笔试题:用C写一个函数测试当前机器大小端模式

“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h> 2 3 union test 4 { 5 int a; 6 char b; 7 }; 8 9 int endian_test(void) 10 { 11 union test t1; 12 t1.a = 1; 13 return t1.b; 14 } 15 16 int main(void) 17 { 18 int i =

【Python装饰者】在函数测试的作用

[引言] 我们经常需要多函数进行耗时测试,测试方法有许多,这里介绍装饰者的方法,提高耗时测试代码的可复用性,在其他方面的应用也是如此. [设计原则] 类应该对扩展开放,对修改关闭. [代码] (1)定义装饰者具体方法 #encoding: UTF-8 ''' Created on 2016??12??7?? @filename: test.py @author: YYH ''' import time from functools import wraps class TimeRecorder:

2017年11月4日 vs类和结构的区别&amp;哈希表&amp;队列集合&amp;栈集合&amp;函数

类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象. 结构没有构造函数,但可以添加.结构没有析构函数 结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口 //哈希表 //不规定长度 不规定类型 不规定建类型 //Hashtable j = new Hashtable(); //

函数测试

这里以体育竞技模拟程序内涵数为例 原完整代码 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed May 15 11:38:02 2019 4 5 @author: lenovo 6 """ 7 8 import random 9 import math 10 def printIntro(): 11 print("这个程序模拟量个选手A和B的乒乓球比赛") 12 print(&q

夺命雷公狗C/C++-----9---自定义一个函数测试简单的运算

温馨提示:c/c++中的变量在同一个作用域内不可以从名. 我们在成程序的时候最好将原理图给弄明白,不然很难写的,如下图所示: 在这个图像中我们可以很清新的看得到,test.cpp里面的main里面进行总的控制, test2.c自定义一个  add 的函数让他进行整型进行运算.. 首先我们在头文件创建一个test.h  我们在里面定义好我们的 int a  和 int  b  分别是多少,如下图所示: 然后我们写 写一个test.cpp,将结构搭建起来再说,如下所示: 然后我们开始写   test

transform 函数测试

#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; // 自定义泛函数 template <class T> void PRINT_ELEMENTS(const T& coll, const char * str="") { typename T::const_iterator po

Python全栈__函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数

1.函数的有用信息 代码1: 1 def login(username, password): 2 """ 3 此函数需要用户名,密码两个参数,完成的是登录的功能. 4 :return: True 登录成功. False登录失败. 5 """ 6 print(login.__name__) 7 print(login.__doc__) 8 print('登录成功...') 9 return True 10 11 print(login.__nam