为整数编号-链表

使用以下结构
struct nn
{
   int no;
   int num;
};

建立一个结构数组,从键盘输入若干个整数,保存在数组元素的num成员中,并根据输入的数按从小到大进行编号,将编号保存在no成员中。按整数的输入顺序输出整数及其编号。输入的整数不超过100个,每个整数的绝对值不大于1000,输入时以空格分隔整数。
例如输入:4 3 6 8 2 3 9
输出:
      4 4
      3 2
      6 5
      8 6
      2 1
      3 3
      9 7
要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第2个整数为3,第6个整数也为3,则将先输入的整数3的编号在前,后输入的整数3的编号在后。编写函数完成为整数编号

函数原型:int number( char *str, struct nn a[] );
其中:str:保存以字符串方式接收的键盘输入,
          a: 保存整数及编号的结构数组的首地址,
函数返回值:已输入的整数的个数。 

预设代码

前置代码

view plainprint?

  1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
  2. #include <stdio.h>  
  3. struct nn  
  4. {  int no;     
  5.    int num;     
  6. };  
  7.   
  8. typedef struct nn DATA;  
  9.   
  10. int number( char * , DATA []);  
  11.   
  12. int main( )  
  13. {     
  14.    DATA b[100];    
  15.    char sa[500];    
  16.    int i, n;    
  17.    gets( sa );   
  18.    n = number( sa, b );   
  19.    for ( i=0; i<n; i++ )   
  20.        printf("%d %d\n", b[i].num, b[i].no );   
  21.    return 0;  
  22. }  
  23.   
  24. /* Here is waiting for you  
  25.   int number( char * str, DATA a[] ) 
  26.   { 
  27.       .... 
  28.   } 
  29. */  
  30.   
  31. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
  32. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
    /*使用以下结构
    struct nn
    {
       int no;
       int num;
    };
    建立一个结构数组,从键盘输入若干个整数,
    保存在数组元素的num成员中,并根据输入的数按从小到大进行编号,
    将编号保存在no成员中。按整数的输入顺序输出整数及其编号。
    输入的整数不超过100个,每个整数的绝对值不大于1000,输入时以空格分隔整数。
    例如输入:4 3 6 8 2 3 9
    输出:
          4 4
          3 2
          6 5
          8 6
          2 1
          3 3
          9 7
    要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。
    例如:输入的第2个整数为3,第6个整数也为3,
    则将先输入的整数3的编号在前,后输入的整数3的编号在后。
    编写函数完成为整数编号。
    函数原型:int number( char *str, struct nn a[] );
    其中:str:保存以字符串方式接收的键盘输入,
              a: 保存整数及编号的结构数组的首地址,
    函数返回值:已输入的整数的个数。 
    */
    #include <stdio.h> 
    #include<string.h>
    #include<math.h> 
    struct nn  
    {  int no;     
       int num;     
    };  
      
    typedef struct nn DATA;  
      
    int number( char * , DATA []);  
      
    int main( )  
    {     
       DATA b[100];    
       char sa[500];    
       int i, n;    
       gets( sa );   
       n = number( sa, b );   
       for ( i=0; i<n; i++ )   
           printf("%d %d\n", b[i].num, b[i].no );   
       return 0;  
    }  
    
    int number( char * str, DATA a[] ) 
    { 
       int i,n = 0, index;
     
        a[0].num = a[0].no = 0;
        while(1)
        {
            if(*str<='9' && *str >= '0')
            {
                a[n].num *= 10;
                a[n].num += *str - '0';
            }
            else
            {
                index = 1;
                for(i = 0;i < n; i ++)
                {
                    if(a[i].num > a[n].num)
                    {
                        a[i].no ++;
                    }
                    else index ++;
                }
                a[n].no = index;
                n ++;
                a[n].no = a[n].num = 0;
            }
     
            if(*str == 0) break;
            str ++;
        }
        return n;
      } 
      
    /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整数链表排序的c源代码 说明:试按以下给出的排序算法为整数链表编写一个排序函数: 该算法是按表元键值的各位值进行排序。 设有一个整数链表,其表元的键值为不超过三位数的整数,不妨设键值形式ABC。其A表示键值的百位数,B为十位数,C为个位数。首先按键值的个位值C对链表作分拆和链接,先把链表分拆成10个队列链表,然后以C的值从0至9的顺序把分拆后的十个队列链表重新收集成一个链表。接着依次对键值的B和A进行同样的分拆和链接操作,则最后收集起来的链表是按键值从小到大排序链接的。如有一个链表按它们的键值其表元的链接顺序依次为: 153 678 56 288 457 653 721 876 433 254 按它们的键值的个位分拆,得到十个队列链表,列出它们的键值顺序有: 0: 空链表 1: 721 2: 空链表 3: 153 653 433 4: 254 5: 空链表 6: 56 876 7: 457 8: 678 288 9: 空链表 顺序将它们收集一起后,链表的键值顺序有: 721 153 653 433 254 56 876 457 678 288 再按它们键值的十位分拆,得到十个队列链表,列出它们的键值顺序有: 略。 顺序将它们收集在一起后,链表的键值顺序有: 略。 再按它们键值的百位分拆,得到十个队列链表,列出它们的键值顺序有: 略。 顺序将它们收集一起后,链表的键值顺序有: 56 153 254 288 433 457 653 678 721 876 要求: 1、 试用C语言编程实现以上功能 2、 10个数字随机生成 3、 程序可读性好 ps:头文件#include<stdafx.h> 包含 #include <stdio.h> #include <malloc.h> #include <time.h> #include <stdlib.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值