当前位置: 首页 > news >正文

数据结构测试模拟题(1)

1、约瑟夫问题

#include<bits/stdc++.h>
using namespace std;
const int N=25;
int e[N],ne[N],head=-1,idx=1;
int n,m;
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>>m;for(int i=1;i<=n;i++){if(i==1){add_to_head(i);}else{add(i-1,i);}}ne[n]=head;int cur=head;while(n--){for(int i=1;i<m-1;i++){cur=ne[cur];}cout<<e[ne[cur]]<<" ";ne[cur]=ne[ne[cur]];cur=ne[cur];}return 0;
}
#include<iostream>
#include<queue>
using namespace std;
int n,m;
int main(){cin>>n>>m;queue<int>q;for(int i=1;i<=n;i++){q.push(i);}int i=1;while(!q.empty()){if(i==m){cout<<q.front()<<" ";q.pop();i=1;}else{q.push(q.front());q.pop();i=i+1;}}return 0;
}

2、单链表的创建,销毁与遍历

#include <iostream>
using namespace std;struct Node {int data;Node* next;
};int main() {Node* head = NULL;int num;// 逆序创建链表while (cin >> num && num != -1) {Node* newNode = new Node;newNode->data = num;newNode->next = head;head = newNode;}// 遍历链表输出Node* cur = head;while (cur != NULL) {cout << cur->data;if (cur->next != NULL) cout << " ";cur = cur->next;}cout << endl;// 销毁链表while (head != NULL) {Node* temp = head;head = head->next;delete temp;}return 0;
}

3、最大子段和

#include<bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;int a[105]; for (int i = 1; i <= n; i++) {cin >> a[i];}int dq_max = a[1]; int qj_max = a[1];for (int i = 2; i <= n; i++) {dq_max = max(a[i], dq_max + a[i]);qj_max = max(qj_max, dq_max);}cout << qj_max << endl;return 0;
}

4、求二叉树的高度

#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{int data;int left;int right;
}a[N];
int n;
int dfs(int root){if(root==0)return 0;int h1=dfs(a[root].left);int h2=dfs(a[root].right);return max(h1,h2)+1;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].data>>a[i].left>>a[i].right;}cout<<dfs(1);return 0;
}

5、二叉树的遍历

#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{int left;int right;
}a[N];
int n;
void inorder(int root){if(root==0)return;cout<<root<<" ";inorder(a[root].left);inorder(a[root].right);
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].left>>a[i].right;}inorder(1);return 0;
}

6、完全二叉树的权值

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n,x;
int main(){int h=0,nn=0;cin>>n;for(int i=1;i<=n;i++){if(i>nn){nn+=pow(2,h);h++;}cin>>x;a[h]+=x;}int max_a=0,maxh=0;for(int i=1;i<=h;i++){if(a[i]>max_a){max_a=a[i];maxh=i;}}cout<<maxh<<endl;return 0;
}

7、二叉树求值

#include<bits/stdc++.h>
using namespace std;
const int N = 105; // 题目限制n≤100struct Node {int value;       // 节点权值int left, right; // 左右子节点编号int count;       // 子树节点个数int sum;         // 子树权值和
};Node nodes[N];// 递归计算以u为根的子树的节点个数和权值和
void dfs(int u) {if (u == 0) return; // 空节点// 递归处理左右子树dfs(nodes[u].left);dfs(nodes[u].right);// 计算当前子树的节点个数和权值和nodes[u].count = 1; // 自身nodes[u].sum = nodes[u].value;if (nodes[u].left != 0) {nodes[u].count += nodes[nodes[u].left].count;nodes[u].sum += nodes[nodes[u].left].sum;}if (nodes[u].right != 0) {nodes[u].count += nodes[nodes[u].right].count;nodes[u].sum += nodes[nodes[u].right].sum;}
}int main() {int n;cin >> n;// 读取每个节点的信息for (int i = 1; i <= n; i++) {cin >> nodes[i].value >> nodes[i].left >> nodes[i].right;nodes[i].count = 0;nodes[i].sum = 0;}// 从根节点开始递归计算(假设根节点是1)dfs(1);// 输出每个节点的子树信息for (int i = 1; i <= n; i++) {cout << nodes[i].count << " " << nodes[i].sum << endl;}return 0;
}

8、最大连续子序列

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N];
int b[N];
int n;
int main(){cin>>n;for(int i=1;i<+n;i++){cin>>a[i];}int t=0;for(int i=1;i<=n;i++){if(a[i]>=0){t=1;break;}}if(t==0){cout<<a[1]<<" "<<a[n];}b[1]=a[1];int max=b[1],begin=0,end=0;for(int i=1;i<n;i++){if(b[i-1]<0){b[i]=a[i];}else{b[i]=b[i-1]+a[i];}if(b[i]>max){max=b[i];end=i;}}for(begin=end;begin>=0;begin--){if(b[begin<0]){break;}}begin++;cout<<max<<endl;return 0;
}

9、单链表基本操作

#include<bits/stdc++.h>
using namespace std;
struct node{int data;node* next;
};
int n;
int main(){cin>>n;node* head=NULL;node* tail=NULL;//构建初始链表for(int i=1;i<=n;i++){int v;cin>>v;node* newnode=new node{v};if(!head){head=tail=newnode;}else{tail->next=newnode;tail=newnode;}}int m;cin>>m;//处理操作for(int i=1;i<=m;i++){int op,k;cin>>op>>k;if(op==0){int d;cin>>d;if(k==0){node* newnode=new node{d};newnode->next=head;head=newnode;if(!tail){tail=newnode;}}else{node* curr=head;for(int j=1;j<k&&curr;j++){curr=curr->next;}if(curr){node* newnode=new node{d};newnode->next=curr->next;curr->next=newnode;if(tail==curr){tail=newnode;}}}}else if(op==1){if(k==0)continue;if(k==1){if(head){node* tmp=head;head=head->next;if(!head)tail=NULL;delete tmp;}}else{node* p=head;for(int j=1;j<k-1&&p;j++){p=p->next;}if(p&&p->next){node* t=p->next;p->next=t->next;if(t==tail) tail=p; // 修正:更新尾指针delete t;	}}}}//输出链表node* curr=head;while(curr){cout<<curr->data<<" ";curr=curr->next;}cout<<endl;//释放内存while(head){node* tmp=head;head=head->next;delete tmp;}return 0;
}

相关文章:

  • ES 调优帖:关于索引合并参数 index.merge.policy.deletePctAllowed 的取值优化
  • form-create-designer中$inject参数的数据结构及各项属性说明
  • 面向未来,遨游推出5G-A智能对讲机等系列终端
  • 8 定时任务与周期性调度
  • Redisson中为什么用lua脚本不用事务
  • V2X协议|如何做到“车联万物”?【无线通信小百科】
  • 【HarmonyOS 5】金融应用开发鸿蒙组件实践
  • Web技术与Nginx网站环境
  • 在tp6模版中加减法
  • 从代码学习深度学习 - 预训练word2vec PyTorch版
  • 股指期货模型,简单易懂的套利策略
  • 程序运行报错分析文档
  • MySQL事务管理:事务控制与锁机制详解
  • 数据库(二):ORM技术
  • Spring AI 介绍
  • DeepSeek-R2大模型即将发布,当贝AI或成首批接入平台
  • HOW - 结合 AI 进行 Tailwind 样式开发
  • 编程日志5.13
  • pycharm无需科学上网工具下载插件的解决方案
  • 多模态实时交互边界的高效语音语言模型 VITA-Audio 介绍
  • 新型基因编辑工具可精准嵌入完整基因
  • 上海市政府党组赴全面从严治党警示教育基地参观学习,推进作风建设走深走实
  • 国家统计局督察组:江苏有关地区仍存在干预数据上报等问题
  • 在“三只手”上跳舞:公共政策的科学与艺术——读《市场、国家和民众:公共政策经济学》
  • 王毅同丹麦外交大臣拉斯穆森会谈
  • 不赚“快钱”的佳沛:蒋时杰解密新西兰国果如何在中国“慢养”出43亿生意