#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;
}
这段是我输入时的代码,但只能输入三行,不知道怎么在指定地址申请空间
#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语言中没有指定内存地址分配空间的操作。
这道题目的意思,应该是采用模拟链表进行实现。
即预先定义好一个数组,将数组的下标作为“地址”,从而将一个个元素串联在一起,形成一个链表(这种操作在算法竞赛中非常常见)。