码迷,mamicode.com
首页 > 其他好文 > 详细

雪泥鸿爪-教学中的debug(9)

时间:2014-06-29 00:44:22      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   get   使用   

题目: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值,则输入结束.

输出

与每组输入的测试数据相对应,输出其按从小到大排好序后的整数序列.

注意:每组输出占一行.

样例输入

10
9 8 7 6 5 4 3 2 1 -1
5
88 77 66 55 33
0

样例输出

-1 1 2 3 4 5 6 7 8 9
33 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 void Main.cc:10:21: error: ‘L‘ was not declared in this scope Main.cc:15:17: error: variable or field ‘createlist‘ declared void Main.cc:15:23: error: ‘L‘ was not declared in this scope Main.cc:15:25: error: expected primary-expression before ‘int‘
辅助解释:
‘L‘ was not declared in this scope:变量没有声明过,检查下是否拼写错误!
 
错误到底是怎么回事?答案请点击下面
bubuko.com,布布扣
/*
该编译错误比较诡异,我看了几分钟都没有看出来错在何处.

无奈何之下,我把link改成了LINK, OJ上就编译通过了. 很明显,编译器的头文件中可能已经使用标识符link, 这正是我猜测的
*/
View Code

 

雪泥鸿爪-教学中的debug(9),布布扣,bubuko.com

雪泥鸿爪-教学中的debug(9)

标签:style   blog   http   color   get   使用   

原文地址:http://www.cnblogs.com/4bytes/p/3793969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!