这是洛谷上的数列有序的题,我的代码有问题,请帮我改正并解释一下,谢谢
#include
using namespace std;
const int Nmax=107;
struct Node{
int data;
int nxt;
}node[Nmax];
int size;
int head;
int main(){
while(cin>>n>>m){
if(!n&&!m){
break;
}
int now=head;
for(int i=0;i>x;
node[node[now].nxt]now.nx=++size;
node[now.nx].data=x;
node[now.nx].nxt=-1;
}
now=head;
while(now!=-1){
if(m>node[now].data){
++size;
node[size].data=m;
node[size].nxt=size;
break;
}
++size;
node[size].data=m;
node[size].nxt=head;
head=size;
now=heas;
while(now!=-1){
if(now.nx==-1)
cout<"\n";
else
cout<" ";
if(now.nx!=-1)
now=node[now.nx];
}
}
}
这段代码中出现了一个编译错误,即#include <bits/stdc++.h>
,应该改为#include <bits/stdc++.h>
,因为<
和>
是HTML中的特殊字符,编译器无法识别。
另外,代码中还有一些语法错误,比如cin>>n>>m
应该改为int n,m; cin>>n>>m;
,node[node[now].nxt]now.nx=++size;
应该改为node[node[now].nxt].nxt=++size;
,now=heas;
应该改为now=head;
等等。
以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;
const int Nmax=107;
struct Node{
int data;
int nxt;
}node[Nmax];
int size;
int head;
int main(){
int n,m,x;
while(cin>>n>>m){
if(!n&&!m){
break;
}
int now=head;
for(int i=0;i<n;i++){
cin>>x;
node[node[now].nxt].nxt=++size;
node[now].nxt=size;
node[size].data=x;
node[size].nxt=-1;
}
now=head;
while(now!=-1){
if(m>node[now].data){
++size;
node[size].data=m;
node[size].nxt=size;
break;
}
++size;
node[size].data=m;
node[size].nxt=head;
head=size;
now=head;
while(now!=-1){
if(node[now].nxt==-1)
cout<<node[now].data<<"\n";
else
cout<<node[now].data<<" ";
if(node[now].nxt!=-1)
now=node[node[now].nxt].nxt;
else
now=-1;
}
}
}
return 0;
}
这段代码实现的功能是,读入一个有序链表和一个数m,将m插入到链表中的合适位置,并输出新的链表。
注释中已经解释了修改的细节,主要是使用链表的插入操作来保证数列有序。
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 107;
struct Node {
int data;
int nxt;
} node[Nmax];
int size;
int head;
int main() {
int n, m, x;
while (cin >> n >> m) {
if (!n && !m) {
break;
}
size = 0;
head = ++size; // 头结点
node[head].nxt = -1;
for (int i = 0; i < n; i++) {
cin >> x;
int now = head;
while (node[now].nxt != -1 && node[node[now].nxt].data < x) {
now = node[now].nxt;
}
++size;
node[size].data = x;
node[size].nxt = node[now].nxt;
node[now].nxt = size;
}
int now = head;
while (node[now].nxt != -1 && node[node[now].nxt].data < m) {
now = node[now].nxt;
}
++size;
node[size].data = m;
node[size].nxt = node[now].nxt;
node[now].nxt = size;
now = node[head].nxt;
while (now != -1) {
cout << node[now].data;
if (node[now].nxt != -1) {
cout << " ";
} else {
cout << endl;
}
now = node[now].nxt;
}
}
return 0;
}
通过这次实验,让我对顺序表、链表、二叉排序树、连地址哈希表和开放地址哈希表的结构有了更深刻的认识;学会如何去使用基于以上结构的顺序查找、折半查找等;还学会了如何输出查找时间以及他们的ASL(平均查找长度)