第二节 数据结构基础 课后作业

第二节 数据结构基础 课后作业

二叉树,队列,栈等

洛谷 P1196 约瑟夫问题

#include<iostream>
using namespace std;
struct node{//定义链表节点 
	int data;//节点的值 
	node *next;//单向链表 
	};
int main(){
	int n,m;scanf("%d %d",&n,&m);
	node *head,*p,*now,*prev;//定义变量
	head=new node;head->data=1;head->next=NULL;//分配第一个节点,数据为1 
	now=head;//当前指针是头 
	for(int i=2;i<=n;i++){
		p=new node;p->data=i;p->next=NULL;//p是新节点 
		now->next=p;//把申请的新节点连到前面的链表上 
		now=p;//尾指针后移一个 
		
	} 
	now->next=head;//尾指针指向头,循环链表建立完成 
	//链表建立完成 
	now=head,prev=head;//从第一个数开始数 
	while((n--)>1){
		for(int i=1;i<m;i++){//数到m停止 
			prev=now;//记录上一个位置,用于下面跳过第m个节点 
			now=now->next;
		}
		printf("%d ",now->data);//输出第m个节点 含空格 
		prev->next=now->next;//跳过此节点 
		delete now;//释放节点 
		now=prev->next;//新的一轮 
	} 
	printf("%d",now->data);//打印最后一个节点,无空格 
	delete now;//释放最后一个节点 
	return 0;
}

洛谷 P1160 队列安排

#include<iostream>
using namespace std;
struct node{
	int previd,nextid;
	}nodes[100005]={0};
void insert(int x,int i,int y){
	if(y==0){//左插入 
			nodes[i].previd=nodes[x].previd;
			nodes[i].nextid=x;
			nodes[x].previd=i;
			nodes[nodes[i].previd].nextid=i;
		}
		else{//右插入 
			nodes[i].nextid=nodes[x].nextid;
			nodes[i].previd=x;
			nodes[x].nextid=i;
			nodes[nodes[i].nextid].previd=i;
		}
}
void dele(int d){
	nodes[nodes[d].nextid].previd=nodes[d].previd;
	nodes[nodes[d].previd].nextid=nodes[d].nextid;	
	nodes[d].nextid=nodes[d].previd=d;
}
int main(){
	int n;cin>>n;
	nodes[0].nextid=0;
	nodes[0].previd=0;
	insert(0,1,1);
	for(int i=2;i<=n;i++){
		int x,y;cin>>x>>y;
		insert(x,i,y);
	}
	int m;cin>>m;//删除 
	while(m--){
		int d;cin>>d;
		dele(d);
	}
	for(int i=nodes[0].nextid;i;i=nodes[i].nextid){
		cout<<i<<' ';
	}
	return 0;
} 

洛谷 P1540 机器翻译

#include<bits/stdc++.h>
using namespace std;
int Hash[1010]={0};//标记内存中是否存在 
queue<int>mem;//队列模拟内存 
int main(){
	int m,n;cin>>m>>n;
	int cnt=0;
	while(n--){
		int word;scanf("%d",&word);
		if(!Hash[word]){//如果不存在 
			cnt++;
			mem.push(word);//单词入队尾 
			Hash[word]=1;//标记 
			while(mem.size()>m){//超内存 
				Hash[mem.front()]=0; 
				mem.pop();//删去队头单词
			}
		}
	}
	printf("%d",cnt);
	
	
	
	return 0;
}

洛谷 P4913

#include<iostream>
using namespace std;

struct node{
	int lson,rson;
};
node nodes[1000010];
int n,ans;

void preorder(int id,int sum){
	if(id==0) return;
	ans=max(ans,sum);
	preorder(nodes[id].lson,sum+1);
	preorder(nodes[id].rson,sum+1);
}

int main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		cin>>nodes[i].lson>>nodes[i].rson;
	}
	preorder(1,1);
	cout<<ans;
	return 0;
}

洛谷 P3156

#include<iostream>
using namespace std;
int a[2000005];
int main(){
	int n,m,b;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<m;i++){
		scanf("%d",&b);
		printf("%d\n",a[b]);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《PHP基础教程案例(第2版)》的课后作业是通过实践来巩固学习的知识和技能。在这本书中,作者通过具体的案例来讲解PHP的基础知识点和应用技巧,课后作业则是为了帮助读者更好地理解和应用这些知识。 课后作业可以包括以下几个方面的内容: 1. 编写代码:根据书中案例的要求,编写相应的PHP代码。这些代码可以是简单的输出语句,也可以是基于数据库的数据操作。 2. 调试错误:通过阅读书中案例的代码和错误信息,找出其中的错误并进行修复。这个过程可以帮助读者提升自己的调试能力和解决问题的能力。 3. 思考问题:根据书中案例的要求,思考其中的问题并给出自己的解决方案。这个过程可以帮助读者培养自己的思考能力和创造性思维,增强对知识的理解和应用能力。 4. 扩展任务:在完成基础任务的基础上,可以进行一些额外的扩展任务。例如,对案例中的功能进行升级或改进,添加一些新的功能等。这个过程可以帮助读者巩固已有的知识,并在实践中学习新的知识。 通过完成这些课后作业,读者可以加深对PHP基础知识的理解和应用,提高自己的编程能力,为今后的学习和工作奠定坚实的基础。同时,通过实践中的问题解决和代码编写,读者还能积累宝贵的经验,提高自己的解决问题的能力和创造能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值