home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / c / 12219 < prev    next >
Encoding:
Text File  |  1992-08-12  |  2.0 KB  |  69 lines

  1. Xref: sparky comp.lang.c:12219 comp.programming:2283
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!pacific.mps.ohio-state.edu!linac!att!att!ulysses!ulysses.att.com!kpv
  3. From: kpv@ulysses.att.com (Phong Vo)
  4. Newsgroups: comp.lang.c,comp.programming
  5. Subject: Re: A LITTLE BRAINTEASER...
  6. Message-ID: <17063@ulysses.att.com>
  7. Date: 12 Aug 92 14:40:50 GMT
  8. References: <aet.713608023@munagin> <1992Aug12.103013.4999@cs.ruu.nl>
  9. Sender: netnews@ulysses.att.com
  10. Organization: AT&T Bell Labs
  11. Lines: 56
  12.  
  13. In article <1992Aug12.103013.4999@cs.ruu.nl> matthys@cs.ruu.nl (Matthys Kuiper) writes:
  14. >In <aet.713608023@munagin> aet@mullian.ee.mu.OZ.AU (bert thompson) writes:
  15. >>is it possible to write a program that reverse the order of input lines
  16. >>without using data structures.
  17. >>the rules of the game are you can use anything but data structures, or more
  18. >>specifically you cannot use the heap.
  19. >
  20. >Below is my solution in Pascal. The translation of this program
  21. >into C is horrible to read and not included in this posting.
  22. <code deleted>
  23.  
  24. The code probably isn't right either since functions such as readln() may very well
  25. does some form of dynamic memory allocation to store the lines.
  26. Here's a piece of C code that does the job and uses nothing but stack space.
  27. The more general requirement of not using data structures is of course impossible
  28. to satisfy since if a program manipulates data, it has to hold the data somewhere.
  29. The below code uses a thinly disguised link list to store characters of a line.
  30.  
  31. ---------------------------------------------
  32. write_line(line)
  33. char**    line;
  34. {
  35.     if(line)
  36.     {    write_line((char**)line[1]);
  37.         write(1,line[0],1);
  38.     }
  39. }
  40.  
  41. reverse_lines(last)
  42. char    **last;
  43. {
  44.     char    c;
  45.     char    *line[2];
  46.  
  47.     if(read(0,&c,1) != 1)
  48.         return;
  49.  
  50.     if(c != '\n')
  51.     {    line[0] = &c;
  52.         line[1] = (char*)last;
  53.         reverse_lines(line);
  54.     }
  55.     else
  56.     {    reverse_lines((char**)0);
  57.         write_line(last);
  58.         write(1,&c,1);
  59.     }
  60. }
  61.  
  62. main()
  63. {
  64.     reverse_lines((char**)0);
  65. }
  66.   
  67. Phong Vo, kpv@ulysses.att.com
  68. AT&T Bell Labs, 600 Mountain Ave, Murray Hill, NJ07974
  69.