m0_60433029 2021-08-12 18:22 采纳率: 100%
浏览 33
已结题

请问怎么构建一个指定地址的链表,如下图?


#include<stdio.h>
typedef struct list {
    int data;
    struct list* next;
} list;
int main() {
    int address0, N, K;
    scanf("%d %d %d\n", &address0, &N, &K);//输入第一行
    for (int i = 0; i < N; i++) {//输入每个节点信息
        int address, data, next;
        scanf("%d %d %d\n", &address, &data, &next);
        list* point = address;
        point->data = data;
        point->next = next;
    }

这段是我输入时的代码,但只能输入三行,不知道怎么在指定地址申请空间
img

  • 写回答

1条回答 默认 最新

  • wingaso 2021-08-12 23:58
    关注
    #include<stdio.h>
    typedef struct list{
        int data;
        int next;
    } list;
    list l[100010];
    int addr[100010],idx = 0;
    
    int rever(int K,int ad){
        int p = ad,q = l[p].next,r = l[q].next;
        addr[idx++] = ad;
        for(int i = 0;i < K - 1;i++){
            l[q].next = p;
            p = q;
            q = r;
            r = l[r].next;
        }
        addr[idx++] = p;
        return q;
    }
    int solve(int beg,int K,int N){
        int p = beg;
        for(int i = K;i <= N;i += K){
            p = rever(K,p);
        }
        for(int i = 0;i < idx;i += 2){
            l[addr[i]].next = addr[i + 3];
        }
        l[addr[idx - 2]].next = p;
        return addr[1];
    }
    int main() {
        int address0,N,K;
        scanf("%d %d %d", &address0, &N, &K);//输入第一行
        for (int i = 0; i < N; i++) {//输入每个节点信息
            int address, data, next;
            scanf("%d %d %d", &address, &data, &next);
            l[address].data = data;
            l[address].next = next;
        }
        int beg = solve(address0,K,N);
        for(int i = 0,p = beg;i < N;i++){
            printf("%05d %d %05d\n",p,l[p].data,l[p].next);
            p = l[p].next;
        }
        return 0;
    }
    

    给你改好了。
    C语言中没有指定内存地址分配空间的操作。
    这道题目的意思,应该是采用模拟链表进行实现。
    即预先定义好一个数组,将数组的下标作为“地址”,从而将一个个元素串联在一起,形成一个链表(这种操作在算法竞赛中非常常见)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月28日
  • 已采纳回答 8月20日
  • 创建了问题 8月12日

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型