B 1075 链表元素分类(散列+结构体实现链表分类)

题目

在这里插入图片描述

思路

PAT乙级的考点对数据结构涉及很少,例题里一共出现了两次链表,但其实两次都可以用散列来实现。
本题用散列的思路参考了柳神。

  1. 用了散列,hash【address】来储存地址对应的值。
  2. 分类时再定义三个数组,来储存address。
  3. 输出时,比较取巧。先输出当前address 当前data 下一个address 最后再输出一个-1指向空节点。

不过还是建议学一学链表,这题用链表也不难。

AC代码

散列实现:

#include<bits/stdc++.h>
using namespace std;

struct node{
	int data;
	int next;
};

int main(){
	int add,n,k;
	cin>>add>>n>>k;
	
	node list[100010];
	int p;
	for(int i=0;i<n;i++){
		cin>>p;
		
        scanf("%d%d", &list[p].data, &list[p].next);
	}
	
	p=add;
	vector<int> v[3];
	while(p!=-1){
		int data=list[p].data;
		if(data<0){
			v[0].push_back(p);
		}
		else if(data >= 0 && data<= k){
			v[1].push_back(p);
		}
		else v[2].push_back(p);
		p=list[p].next;
	}
	
	int flag=0;
	for(int i=0;i<3;i++){
		for(int j=0;j<v[i].size();j++){
			if(!flag){
				cout<<setw(5)<<setfill('0')<<v[i][j]<<' ';
				cout<<list[v[i][j]].data<<' ';
				flag=1;
			}
			else {
				cout<<setw(5)<<setfill('0')<<v[i][j]<<endl;
				cout<<setw(5)<<setfill('0')<<v[i][j]<<' ';
				cout<<list[v[i][j]].data<<' ';
			}
		}
	}
	cout<<"-1";
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值