2022/2/15

链表:逻辑结果是顺序连接的,并不像顺序表那样物理相邻。

 

图中头文件为输入错误,应该改为头结点

#include<stdio.h>
#include<stdlib.h>
#include <time.h>

#define OK 1
#define FAIL -1
typedef struct node
{
    int num;
    struct node *next;
  
}Node,*Link;
void creat_link(Link *head)
{
    *head = NULL;
}
int is_malloc(Link new_node)
{
    if (new_node==NULL)
    {
        printf("malloc error!\n");
        return FAIL;   
    }
    
    return OK;
}
int creat_node(Link *new_node)
{
    *new_node=(Link)malloc(sizeof(Node));
    if (OK == is_malloc(*new_node))
    {
        return OK;
    }
    return FAIL;
    
   
}
void insert_node(Link *head,Link new_node)
{
    new_node->next=*head;
    *head=new_node;
}
void display_link(Link head)
{
    Link p=NULL;
    p=head;
    if (head==NULL)
    {
        printf("link is empty\n");
        return;
    }
    while (p!=NULL)
    {   
        printf("%d\n",p->num);
        p=p->next;   
    }
        
}
int insert_node_tail(Link *head,Link new_node)
{
    Link p=NULL;
    p=*head;
    if (*head == NULL)
    {
        *head = new_node;
        new_node->next=NULL;
    }
    else
    {
        while (p->next!=NULL)
        {
            p=p->next;
        }
        p->next=new_node;
        new_node->next=NULL;
    }
    
    
}
void clear_node(Link *head)
{
    Link p=NULL;
    p=*head;
    while (*head!=NULL)
    {
        *head=(*head)->next;
        free(p);
        p=*head;
    }  
}
int insert_node_mid(Link *head,Link new_node,int loc)
{
    Link p=NULL;
    p=*head;
    while (p->next!=NULL&&p->num!=loc)
    {
        p=p->next;
    }
    new_node->next=p->next;
    p->next=new_node;
}
int insert_node_sort(Link *head,Link new_node)
{
    Link p=NULL;
    Link q=NULL;
    p=q=*head;
    while (p!=NULL&&p->num<new_node->num)
    {
        q=p;
        p=p->next;
    }
    if (p==*head)
    {
        new_node->next=*head;
        *head=new_node;
    }
    else
    {
        q->next=new_node;
        new_node->next=p;
    }
    
    
}
int delete_node(Link *head,int num)
{
    Link p=NULL;
    Link q=NULL;
    q=p=*head;
    if (NULL == *head)
    {
        printf("链表不存在\n");
    }
    else
    {

        while (p!=NULL&&p->num!=num)
        {
            q=p;
            p=p->next;
        }
        if (NULL == p)
        {
            printf("没有该结点!\n");
        }
        else if (p==*head)
        {
            *head=(*head)->next;
            free(p);
        }
        else
        {
            q->next=p->next;
            free(p);
        }
    }     
}
void reserv_link(Link *head)
{
    Link p1=NULL,p2=NULL,p3=NULL;
    if (*head == NULL)
    {
        printf("reverse: Link is empty!\n");
        return;
    }
    p1=*head;
    if (NULL==(*head)->next)
    {
      return;  
    }
    p2=p1->next;
    p3=p2->next;
    while (p3!=NULL)
    {
        p2->next=p1;
        p1=p2;
        p2=p3;
        p3=p3->next;
    }
    p2->next=p1;
    (*head)->next=NULL; //头结点的下一个指向空,即头结点是尾
    *head=p2;  //p2是最后一个结点
}
int main()
{
    Link head=NULL;
    Link new_node=NULL;
   
    creat_link(&head);
    int i;
    int loc;
    int num;
    srand((unsigned)time(NULL));
    /*printf("请输入你要插入的位置:\n");
    scanf("%d",&loc);*/
    for ( i = 0; i < 10; i++)
    {
        if(OK == creat_node(&new_node))
        {    
            new_node->num =rand()%100;
            //new_node->num=i+1;
            //insert_node(&head,new_node);  头插法
            //insert_node_tail(&head,new_node); 尾指针
            insert_node_sort(&head,new_node);
        }
    }
    
    /*if (OK == creat_node(&new_node))
    {
        printf("请输入想要插入的值\n");
        scanf("%d",&new_node->num);
        insert_node_mid(&head,new_node,loc);
    }*/

    
    printf("insert_node_sort:\n");
    display_link(head);
    printf("请输入要删除的数:\n");
    scanf("%d",&num);
    delete_node(&head,num);
    printf("删除后的有\n");
    display_link(head);
    reserv_link(&head);
    printf("倒序:\n");
    display_link(head);
    clear_node(&head);
    display_link(head);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个简单的盈利模型可以使用简单移动平均线(SMA)和价格的相对强弱指标(RSI)。在这里,我们使用5天的SMA和14天的RSI。 步骤1:计算5天的SMA 将前5天每日的收盘价加起来,除以5得到5天SMA。对于第6天以后的每一天,使用前5天的收盘价数据,将最后一个数据删掉,加上当天的收盘价,再除以5得到新的5天SMA。例如,第6天的SMA是(18.39 + 18.22 + 18.62 + 18.36 + 18.45)/ 5 = 18.48,第7天的SMA是(18.22 + 18.62 + 18.36 + 18.45 + 17.89)/ 5 = 18.11。 步骤2:计算14天的RSI 日价格变化的平均值为14天,其中日涨幅不为零的值与日跌幅不为零的值分别计算得到。每天的变化值为当天的收盘价减去前一天的收盘价的绝对值,如果涨了则记为正值,如果跌了则记为负值。然后计算14天涨幅的平均值和14天跌幅的平均值分别为U和D。计算RSI的公式为:RSI = 100 - (100 / (1 + U / D))。例如,第14天的U为(17.43 - 17.89)= 0.46,D为0,因为当天的收盘价较前一天下跌了。前14天的U和D可以使用同样的方法来计算。 步骤3:判断买入或卖出信号 当价格在5天SMA上方,并且RSI超过70时,表明股票处于超买状态,这时候可以考虑卖出;当价格在5天SMA下方,并且RSI低于30时,表明股票处于超卖状态,这时候可以考虑买入。 这是一个简单的数学模型,实际操作是复杂的,需要注意多个因素的综合考虑,并且需要进行风险管理。此处提供的仅为理论模型,仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值