//开始时,最大输入时,运行超时
//牺牲空间换时间,时间复杂度由O(n^2)变为O(n);
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct data
{
int addr;
int key;
int next;
} Data, *pData;
typedef struct st
{
int addr;
int total;
int count;
} Start,*pStart;
void PrintResult(Data arr[],int count)
{
int i;
for (i = 0; i < count - 1; i++)
{
printf("%05d %d %05d\n",arr[i].addr,arr[i].key,arr[i].next);
}
printf("%05d %d %d",arr[i].addr,arr[i].key,arr[i].next);
return ;
}
void ScanfStart(pStart a)
{
scanf("%d%d%d",&a->addr,&a->total,&a->count);
return ;
}
void ReverData(pData arr, int n)
{
int i;
Data temp;
for (i = 0; i < n / 2; i++)
{
temp.addr = arr[i].addr;
temp.key = arr[i].key;
temp.next = arr[i].next;
arr[i].addr = arr[n-i-1].addr;
arr[i].key = arr[n-i-1].key;
arr[i].next = arr[n-i-1].next;
arr[n-i-1].addr = temp.addr;
arr[n-i-1].key = temp.key;
arr[n-i-1].next = temp.next;
}
}
void CorrectAddress(pData arr, int n)
{
int i;
pData temp = (pData)malloc(n*sizeof(Data));
memcpy(temp, arr, n * sizeof(Data));
for (i = 0; i < n - 1; i++)
{
arr[i].next = temp[i+1].addr;
}
arr[n-1].next = -1;
free(temp);
}
//开始时用的双重循环,运行超时了。
void SortData(pStart start, pData arr, pData num)
{
int i,j;
int dest;
int count = 0;
dest = start->addr;
while (dest != -1)
{
arr[count].addr = num[dest].addr;
arr[count].key = num[dest].key;
arr[count].next = num[dest].next;
dest = arr[count].next;
count++;
}
start->total = count;
}
int main()
{
Start s;
int count,addr,key,next;
int revercount;
pData temp;
ScanfStart(&s);
pData num = (pData)malloc(100001 * sizeof(Data));
count = s.total;
while (count)
{
scanf("%d%d%d",&addr,&key,&next);
num[addr].addr = addr;
num[addr].key = key;
num[addr].next = next;
count--;
}
pData arr = (pData)malloc(s.total * sizeof(Data));
SortData(&s,arr,num);
free(num);
revercount = s.total / s.count;
if (s.count > 1)
{
for (count = 0; count < revercount; count++)
{
temp = arr + s.count * count;
ReverData(temp,s.count);
}
CorrectAddress(arr,s.total);
}
PrintResult(arr,s.total);
free(arr);
return 0;
}
Reversing Linked List
最新推荐文章于 2024-07-11 12:23:05 发布
