数组模拟单链表(可怕的素质)

可怕的素质 (100 分)

亚克星球上的人的素质跟我们福大人比起来,可以说是一个天上,一个地下了。他们去食堂吃饭的时候,很多人都不好好的排队,而是排在某个熟人的后面,或者直接就插到队伍的最前面。这让食堂的工作人员很是恼火。

输入格式:

第一行包含一个整数n(0<n<1000),表示有n个亚克星球上的人去食堂吃饭。

接下来n行,每行1个整数x,表示第i( i从1~n )个人排在了x的后面,当x为0时,表示第i个人排在了最前面。

输出格式:

输出仅一行,包括n个数,以空格作为分隔符,最后一个数的后面没有空格。表示这n个人最后是排成了怎样的队伍。

输入样例:

0
0
2

输出样例:

2 3 1

思路

用idx表示插入链表的顺序,第i个人排在x后面即将i插入到下标是x-1到数的后面(idx从0开始而x从1开始),如果x=0,即插到表头。

代码实现(c++)

using namespace std;
const int N = 1010;
int n,head,idx,e[N],ne[N];

void init(){
    head = -1;
    idx = 0;
}

void add_to_head(int x){
    e[idx] = x;
    ne[idx] = head;
    head = idx ++;
}

void add(int k, int x){
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx ++;
}

int main(){
    cin >> n;
    init();
    int k;
    for(int i = 1; i <=n; i ++){
        cin >> k;
        if(!k) add_to_head(i);
        else add(k - 1,i);
    }
    for(int i = head; i != -1; i = ne[i]){
        cout << e[i] << ' ';
    }
    return 0;
}```
posted @   VJJJJJJ  阅读(276)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示