首页 > 代码库 > 雪泥鸿爪-教学中的debug(9)
雪泥鸿爪-教学中的debug(9)
题目:http://125.221.232.254/JudgeOnline/problem.php?id=1008
1008: 排序(用链表实现)
时间限制: 20 Sec 内存限制: 128 MB提交: 885 解决: 474
[提交][状态][讨论版] [Edit] [TestData]
题目描述
将一个杂乱无序的整数序列,按照从小到大的顺序排列并输出。
用第二章的相关知识实现,即先初始化一个空的单链表,然后每读入一个数据,将该数据存入结点并插入单链表,当然,插入时要从头结点开始向后(或从尾结点开始向前)搜索合适的插入位置,以保证插入后仍然有序。
输出时,从头结点开始向后,顺序输出各结点的值。
输入
测试数据不止一组,每组测试数据:
1)先输入无序序列的整数个数n;(n不超过10000)
2)然后连续输入n个整数;
若n的值输入为0值,则输入结束.
输出
与每组输入的测试数据相对应,输出其按从小到大排好序后的整数序列.
注意:每组输出占一行.
样例输入
109 8 7 6 5 4 3 2 1 -1588 77 66 55 330
样例输出
-1 1 2 3 4 5 6 7 8 933 55 66 77 88
同学的代码如下:
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 struct link{ 5 int key; 6 struct link *pre; 7 struct link *next; 8 }; 9 10 void initlist(link &L) 11 { 12 L.next=NULL; 13 L.pre=NULL; 14 } 15 void createlist(link &L,int n) 16 { 17 int a,i; 18 link *p1,*p2; 19 scanf("%d",&a); 20 p1=new link; 21 p1->key=a; 22 L.next=p1; 23 p1->pre=NULL; 24 25 for(i=1;i<n;i++) 26 { 27 scanf("%d",&a); 28 p2=new link; 29 p2->key=a; 30 p2->pre=p1; 31 p2->next=NULL; 32 p1->next=p2; 33 p1=p1->next; 34 35 } 36 37 } 38 void search(link L,link *&low,link *&high) 39 { 40 low=L.next; 41 high=L.next; 42 while(high->next!=NULL) 43 high=high->next; 44 } 45 void firstquick(link L,link *low,link *high,link *&i) 46 { 47 link *j; 48 int p; 49 i=low; 50 j=high; 51 p=i->key; 52 while(i!=j) 53 { 54 while((i!=j)&&(j->key>=p)) 55 j=j->pre; 56 if(j->key<p) 57 i->key=j->key; 58 while((i!=j)&&(i->key<=p)) 59 i=i->next; 60 if(i->key>p) 61 j->key=i->key; 62 } 63 i->key=p; 64 } 65 void allquick(link L,link *low,link *high,link *&i) 66 { 67 link *t; 68 if(low!=high) 69 { 70 firstquick(L,low,high,i); 71 if(i!=low) 72 allquick(L,low,i->pre,t); 73 if(i!=high) 74 allquick(L,i->next,high,t); 75 } 76 } 77 void print(link L) 78 { 79 link *w; 80 w=L.next; 81 while(w!=NULL) 82 { 83 printf("%d ",w->key); 84 w=w->next; 85 }; 86 printf("\n"); 87 } 88 int main() 89 { 90 link L,*low,*high,*q; 91 initlist(L); 92 int n; 93 while(scanf("%d",&n)&&n) 94 { 95 initlist(L); 96 createlist(L,n); 97 search(L,low,high); 98 allquick(L,low,high,q); 99 print(L);100 }101 return 0;102 }
VC++ 6.0编译通过, 提交到OJ(G++)上出错,信息如下
Main.cc:10:15: error: variable or field ‘initlist‘ declared voidMain.cc:10:21: error: ‘L‘ was not declared in this scopeMain.cc:15:17: error: variable or field ‘createlist‘ declared voidMain.cc:15:23: error: ‘L‘ was not declared in this scopeMain.cc:15:25: error: expected primary-expression before ‘int‘
辅助解释:
‘L‘ was not declared in this scope:变量没有声明过,检查下是否拼写错误!
‘L‘ was not declared in this scope:变量没有声明过,检查下是否拼写错误!
错误到底是怎么回事?答案请点击下面
/*该编译错误比较诡异,我看了几分钟都没有看出来错在何处.无奈何之下,我把link改成了LINK, OJ上就编译通过了. 很明显,编译器的头文件中可能已经使用标识符link, 这正是我猜测的*/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。