LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 562|回复: 1

单链表的返回值问题。

[复制链接]
发表于 2004-5-28 13:21:50 | 显示全部楼层 |阅读模式
在find_lklist()子程序中,如何返回要查找的结点。且在主程序能正确显示其值。能不能出了子程序return p;主程序p= find_lklist()外其他方法,如我这种方法。在参数中直接返回
  1. /*带头结点的单链表*/
  2. #include <stdio.h>
  3. typedef struct node
  4. {
  5.   int data;
  6.   struct node *next;
  7. } lklist;
  8. int main (void)
  9. {
  10.   lklist *head, *p;
  11.   int input;
  12.   int output;
  13.   int count;
  14.   printf("请输入一些数字(0为结束):");
  15.   initiate_lklist(&head);
  16.   create_lklist(&head);
  17.   print_lklist(&head);
  18.   printf("请输入要查找的序号:");
  19.   scanf("%d", &input);
  20.   find_lklist(&head, input, &p);
  21.   printf("第%d号的值为%d\n", input, *p);
  22.   printf("请输入要查找的值:");
  23.   scanf("%d", &input);
  24.   locate_lklist(&head, input, &output);
  25.   printf("该值%d的位置是%d\n", input, output);
  26. }
  27. int initiate_lklist (lklist **head)
  28. {
  29.   (*head) = (lklist *) malloc (sizeof(lklist));
  30.   (*head) -> next = NULL;
  31. }
  32. int create_lklist (lklist **head)
  33. {
  34.   lklist *new, *end;
  35.   int x;
  36.   end = *head;
  37.   scanf("%d", &x);
  38.   while (x != 0)
  39.     {
  40.       new = (lklist *) malloc (sizeof(lklist));
  41.       new -> data = x;
  42.       end -> next = new;
  43.       end = new;
  44.       scanf("%d", &x);
  45.     }
  46.   end -> next = NULL;
  47. }
  48. int print_lklist (lklist **head)
  49. {
  50.   lklist *p;
  51.   int j = 1;
  52.   p = *head;
  53.   printf("最新的排列:");
  54.   if ((*head) != NULL)
  55.     {
  56.       p = p -> next;
  57.       while (p != NULL)
  58.         {
  59.           printf("(%d):", j);
  60.           j++;
  61.           printf("%d ", p -> data);
  62.           p = p -> next;
  63.         }
  64.     }
  65.   printf("\n");
  66. }
  67. int find_lklist (lklist **head, int i, lklist *p)
  68. {
  69.   int j = 0;
  70.   p = *head;
  71.   while ((p -> next != NULL) && (j < i))
  72.     {
  73.       p = p -> next;
  74.       j++;
  75.     }
  76.   if (i == j)
  77.     return 1;   
  78.   else
  79.     {
  80.       printf("该位置不存在!\n");
  81.       return 0;
  82.     }
  83. }
  84. int locate_lklist (lklist **head, int x, int *output)
  85. {
  86.   lklist *p;
  87.   int j = 0;
  88.   p = *head;
  89.   while ((p -> next != NULL) && (p -> data != x))
  90.     {
  91.       p = p -> next;
  92.       j++;
  93.     }
  94.   if (p -> data == x)
  95.     {
  96.      *output = j;
  97.      return 1;
  98.     }
  99.   else
  100.     {
  101.       printf("\n该值不存在!\n");
  102.       return 0;
  103.     }
  104. }
复制代码
发表于 2004-5-28 17:18:24 | 显示全部楼层
不太明白你的意思,返回什么以及如何返回都是由你自己决定的。
一般是返回指向链表节点的指针,找不到就返回NULL。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表