C柱状图(link_list、struct)

Bar for Temperature:

[email protected] ~ $ cat -n bar.c
     1    #include <stdio.h>
     2    #include <stdlib.h>
     3    #include <ctype.h>
     4    #include <unistd.h>
     5
     6    #define WIDTH 3
     7    #define GAP 4
     8
     9    typedef struct tp tp;
    10
    11    int Nodes = 0;
    12
    13    struct tp{
    14        int Temperature;
    15        tp* Pnext;
    16    };
    17
    18    void draw_bar(void);
    19    tp* creat_link_list(void);
    20    int max(tp*);
    21    int min(tp*);
    22    void print_bar(int);
    23    void print_blank(void);
    24
    25    int main(void)
    26    {
    27        draw_bar();
    28        return 0;
    29    }
    30
    31    void draw_bar(void)
    32    {
    33        tp* First_Node = creat_link_list();
    34        system("clear");
    35        tp* Tmp = NULL;
    36        int Highest= max(First_Node);
    37        int Lowest= min(First_Node);
    38        int Height = (Highest * Lowest) < 0 ? Highest : (abs(Highest) > abs(Lowest) ? Highest : Lowest);
    39        int i, j, k;
    40        printf("   ^\n   |\n");
    41        while(Height >= (Lowest < 0? Lowest : 0))
    42        {
    43            Tmp = First_Node;
    44            if(0 == Height)
    45            {
    46                printf(" 0 +");
    47                for(i = 0; i < Nodes; ++i)
    48                {
    49                    for(j = 0; j < GAP; ++j)
    50                    {
    51                        printf("-");
    52                    }
    53                    for(k = 0; k < WIDTH; ++k)
    54                    {
    55                        printf("\033[31m-\033[00m");
    56                    }
    57                }
    58                for(i = 0; i < GAP; ++i)
    59                {
    60                    printf("-");
    61                }
    62                printf(">");
    63            }
    64            else
    65            {
    66                printf("%03i|", Height);
    67                while(Tmp != NULL)
    68                {
    69                    int Var = Tmp->Temperature;
    70                    if((Var > 0 && Height > 0 && Var >= Height) || (Var < 0 && Height < 0 && Var <= Height))
    71                    {
    72                        print_bar(Var);
    73                    }
    74                    else
    75                    {
    76                        print_blank();
    77                    }
    78                    Tmp = Tmp->Pnext;
    79                }
    80            }
    81            printf("\n");
    82            --Height;
    83        }
    84        printf("   |\n");
    85        printf("\n");
    86    }
    87
    88    tp* creat_link_list()
    89    {
    90        tp* Current = NULL;
    91        tp* Last = NULL;
    92        tp* First = NULL;
    93        char Test;
    94        do {
    95            Current = (tp *)malloc(sizeof(tp));
    96            if(Current == NULL)
    97            {
    98                printf("Error occur!\n");
    99                perror("malloc");
   100                exit(1);
   101            }
   102            Current->Pnext = NULL;
   103            if(First == NULL)
   104            {
   105                First = Current;
   106            }
   107            else
   108            {
   109                Last->Pnext = Current;
   110            }
   111            Last = Current;
   112            printf("Please input an interger: ");
   113            scanf("%i",&Current->Temperature);
   114            ++Nodes;
   115            getchar();
   116            printf("Continue ? (Y/N)");
   117            scanf("%c",&Test);
   118        }while(tolower(Test) == ‘y‘);
   119        return First;
   120    }
   121
   122    int max(tp* First_Node)
   123    {
   124        tp* Tmp = First_Node->Pnext;
   125        int Max = First_Node->Temperature;
   126        while (Tmp != NULL)
   127        {
   128            if (Max < Tmp->Temperature)
   129            {
   130                Max = Tmp->Temperature;
   131            }
   132            Tmp = Tmp->Pnext;
   133        }
   134        return Max;
   135    }
   136
   137    int min(tp* First_Node)
   138    {
   139        tp* Tmp = First_Node->Pnext;
   140        int Min = First_Node->Temperature;
   141        while(Tmp != NULL)
   142        {
   143            if(Min > Tmp->Temperature)
   144            {
   145                Min = Tmp->Temperature;
   146            }
   147            Tmp = Tmp->Pnext;
   148        }
   149        return Min;
   150    }
   151
   152    void print_blank()
   153    {
   154        int i;
   155        for (i = 0; i < (WIDTH + GAP); ++i)
   156        {
   157            printf(" ");
   158        }
   159    }
   160
   161    void print_bar(int Var)
   162    {
   163        int i, j;
   164        for(i = 0; i < GAP; ++i)
   165        {
   166            printf(" ");
   167        }
   168        if(Var > 0)
   169        {
   170            for(j = 0; j < WIDTH; ++j)
   171            {
   172                printf("\033[33m#\033[00m");
   173            }
   174        }
   175        else
   176        {
   177            for(j = 0; j < WIDTH; ++j)
   178            {
   179                printf("\033[37m#\033[00m");
   180            }
   181        }
   182    }
时间: 2024-10-16 19:23:19

C柱状图(link_list、struct)的相关文章

浅析时间轮定时器

前言: 最早是看到skynet群里边有人问如何取消定时器的问题,那时候正好在研读skynet代码,于是决定试试.但是最终只在lua层面实现了一个伪取消定时器的方案,而且还是不是优解. 云风说从c层面取消定时器的开销要大于从lua层面取消的开销,当时不知道为什么. 最近研读了云风实现的时间轮定时器代码(看着相当费劲啊),  过程中网上搜了很多资料,但大部分没能帮助我有个更好的理解,所以打算从写篇文章,希望能帮助像我一样的newbee, 更好的理解时间轮定时器. 这里不讲定时器的进化过程,只讲时间轮

struct&amp;&amp;class 空的大小

#include using namespace std; class ClassA { }; class ClassB { private: int b; }; class ClassC : public ClassA { }; class ClassD : public ClassB { }; class ClassE { public: int GetReturnValue() { return 0; } }; struct StructA { }; int main() { cout <

struct iphdr中的__LITTLE_ENDIAN_BITFIELD和__BIG_ENDIAN_BITFIELD

__LITTLE_ENDIAN_BITFIELD表示小端序,__BIG_ENDIAN_BITFIELD表示大端序. /usr/include/linux/ip.h中有一段代码定义了ip首部的结构体,如下: struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #err

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点.终止点(也称锚点)以及两个相互分离的中间点. 滑动两个中间点,贝塞尔曲线的形状会发生变化. UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 . 椭圆 或者 直线和曲线的组合形状 初始化方法: + (instancetype)bezierPath; /

GO语言struct语法

struct -使用type<Name>struct{}定义结构,名称遵循可见性规则 -支持指向自身的指针类型成员 -支持匿名结构.可作用成员或定义成员变量 -匿名结构也可以用于MAP的值 -可以使用字面值对结构进行初始化 -允许值通过指针来读写结构成员 -相同类型的成员可进行直接拷贝赋值 -支持==与!=比较运算符,不支持>或< -支持匿名字段,本质上是定义了以某个类型名称的字段 -嵌入结构作为匿名字段看起来像继承.但不是继承 -可以使用匿名字段的指针 package main

Python学习笔记(三十五)struct

摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431955007656a66f831e208e4c189b8a9e9f3f25ba53000 Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换. struct的pack函数把任意数据类型变成bytes: >>> import struct >>> struc

C++中sizeof(struct)怎么计算?(转)

struct为空时,大小为1. 1. sizeof应用在结构上的情况 请看下面的结构: 1 struct MyStruct 2 { 3 double dda1; 4 char dda; 5 int type; 6 }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double) sizeof(char) sizeof(int)=13 但是当在VC中测试上面结构的大小时,你会发现

P Invoke struct结构

一.获取Struct CHCNetSDK.NET_DVR_PTZPOS pos = new CameraTest.CHCNetSDK.NET_DVR_PTZPOS(); int size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_PTZPOS)); IntPtr ptr = Marshal.AllocHGlobal(size);// 申请内存 uint bytesReturnd = 0; try { if (!CHCNetSDK.NET_DVR_GetD

消息队列状态:struct msqid_ds

Linux的消息队列(queue)实质上是一个链表, 它有消息队列标识符(queue ID). msgget创建一个新队列或打开一个存在的队列; msgsnd向队列末端添加一条新消息; msgrcv从队列中取消息, 取消息是不一定遵循先进先出的, 也可以按消息的类型字段取消息. 1. 标识符(des)和键(key): 消息队列, 信号量和共享存储段, 都属于内核中的IPC结构, 它们都用标识符来描述. 这个标识符是一个非负整数, 与文件描述符不同的是, 创建时并不会重复利用通过删除回收的整数,