m0_73956338 2023-04-01 17:15 采纳率: 75%
浏览 12
已结题

actlist函数不清楚哪儿打错了,求解

img


#include<stdio.h>
#include<stdlib.h>
int n;
typedef struct Lnode
{
    int data;
    struct Lnode *next;
    struct Lnode *bef;
}Lnode;
void creatlist(Lnode *&p)
{
    Lnode *pr,*ps;
    pr=p;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        ps = (Lnode*)malloc(sizeof(Lnode));
        scanf("%d",&ps->data);
        pr->next = ps;
        ps->bef = pr;
        pr = ps;
    } 
    pr->next = NULL;
}
void actlist(Lnode *&p)
{
    Lnode *pr,*ps;
    pr = p->next;
//    ps = (Lnode*)malloc(sizeof(Lnode));
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1&&pr!=NULL;j++)
        {
            if(pr->data > pr->next->data)
        {
            pr->bef=pr->next;
            pr->next->bef=pr->bef;
            pr->bef->next = pr->next;
            pr->next = pr->next->next;
        }
        }
    }
}
void prilist(Lnode *p)
{
    Lnode *pr;
    pr = p->next;
    for(;pr!=NULL;)
    {
        printf("%d ",pr->data);
        pr = pr->next;
    }
}
int main()
{
    Lnode *p;
    p = (Lnode*)malloc(sizeof(Lnode));
    p->bef = NULL;
    p->next = NULL;
    creatlist(p);
    actlist(p);
    prilist(p);
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-01 17:57
    关注

    排序问题

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Lnode {
        int data;
        struct Lnode *next;
        struct Lnode *bef;
    } Lnode;
    
    void create_list(Lnode *&head) {
        int n;
        scanf("%d", &n);
        Lnode *p = head;
        for (int i = 0; i < n; i++) {
            Lnode *node = (Lnode*)malloc(sizeof(Lnode));
            scanf("%d", &node->data);
            p->next = node;
            node->bef = p;
            p = node;
        }
        p->next = NULL;
    }
    
    void sort_list(Lnode *&head) {
        if (head->next == NULL) return;
    
        Lnode *p = head->next->next;
        while (p != NULL) {
            Lnode *q = p->bef;
            int key = p->data;
    
            while (q != head && q->data > key) {
                q->next->data = q->data;
                q = q->bef;
            }
    
            if (q != head && q->data > key) {
                q->next->data = q->data;
                q->data = key;
            } else {
                q->next->data = key;
            }
    
            p = p->next;
        }
    }
    
    void print_list(Lnode *head) {
        Lnode *p = head->next;
        while (p != NULL) {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    int main() {
        Lnode *head = (Lnode*)malloc(sizeof(Lnode));
        head->data = 0;
        head->next = NULL;
        head->bef = NULL;
    
        create_list(head);
        sort_list(head);
        print_list(head);
    
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口