删除负数* -链表

一个带有表头节点的链表中,链表的每个节点保存了非零的整型数据。现请编写函数删除已有的链表中所有数值小于0的节点。

说明:(1)用带表头的单向链表的方式保存数据,每一个节点的数值域保存一个非零整型数。

(2)预设代码包括主函数、建立链表函数、输出链表函数,请编写删除链表中所有数值小于0的节点的函数。

结构的定义:

struct node

{ int data;  struct node *next;

};

typedef struct node NODE;
typedef struct node * PNODE;

删除所有无效数值结点的函数原型:void deleteneg(PNODE head),

其中:参数head是带有头结点的单向链表的头指针。

程序输入:在建立链表时,每次插入到头结点后的结点数据,以0为结束。

预设代码

前置代码

view plainprint?

  1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4.     
  5. struct node    
  6. {  
  7.     int data;    
  8.     struct node * next;    
  9. };    
  10.     
  11. typedef struct node NODE;   
  12. typedef struct node * PNODE;  
  13.    
  14. PNODE constructlist( PNODE head, int num );  
  15. void outlist( PNODE head );  
  16. void deleteneg( PNODE head );   
  17.     
  18. int main ( )    
  19. {   int num=1;    
  20.     PNODE head;    
  21.     
  22.     head = (PNODE)malloc( sizeof(NODE) );    
  23.     head->next = NULL;    
  24.     head->data = -1;    
  25.     
  26.     while ( num!=0 )    
  27.     {   scanf("%d", &num);    
  28.         if ( num!=0 )    
  29.            constructlist (head, num);    
  30.     }    
  31.     deleteneg( head );  
  32.     outlist( head );    
  33.     return 0;    
  34. }    
  35.     
  36. PNODE constructlist( PNODE head, int num )  
  37. {   PNODE p;  
  38.     p = (PNODE)malloc( sizeof(NODE) );   
  39.     p->data = num;  
  40.     p->next = head->next;   
  41.     head->next = p;  
  42.     return head;  
  43. }  
  44.   
  45. void outlist( PNODE head )    
  46. {   PNODE p;    
  47.     p = head->next;    
  48.     while ( p != NULL )    
  49.     {   printf("%d\n", p->data);    
  50.         p = p->next;    
  51.     }    
  52. }    
  53.     
  54. /* This is an example for list. Please programme your code like it.  
  55. void deleteneg( PNODE head )  
  56. {    
  57. }  
  58. */  
  59.   
  60. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
    /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
     
    #include <stdio.h>  
    #include <stdlib.h>  
    /*一个带有表头节点的链表中,链表的每个节点保存了非零的整型数据。
    现请编写函数删除已有的链表中所有数值小于0的节点。
    说明:(1)用带表头的单向链表的方式保存数据,每一个节点的数值域保存一个非零整型数。
    (2)预设代码包括主函数、建立链表函数、输出链表函数,
    请编写删除链表中所有数值小于0的节点的函数。
    结构的定义:
    struct node
    { int data;  struct node *next;
    };
    typedef struct node NODE;
    typedef struct node * PNODE;
    删除所有无效数值结点的函数原型:void deleteneg(PNODE head),
    其中:参数head是带有头结点的单向链表的头指针。
    程序输入:在建立链表时,每次插入到头结点后的结点数据,以0为结束。
    */ 
    struct node    
    {  
        int data;    
        struct node * next;    
    };    
        
    typedef struct node NODE;   
    typedef struct node * PNODE;  
       
    PNODE constructlist( PNODE head, int num );  
    void outlist( PNODE head );  
    void deleteneg( PNODE head );   
        
    int main ( )    
    {   int num=1;    
        PNODE head;    
        
        head = (PNODE)malloc( sizeof(NODE) );    
        head->next = NULL;    
        head->data = -1;    
        
        while ( num!=0 )    
        {   scanf("%d", &num);    
            if ( num!=0 )    
               constructlist (head, num);    
        }    
        deleteneg( head );  
        outlist( head );    
        return 0;    
    }    
        
    PNODE constructlist( PNODE head, int num )  
    {   PNODE p;  
        p = (PNODE)malloc( sizeof(NODE) );   
        p->data = num; 
        p->next = head->next;   
        head->next = p;  
        return head;  
    }  
      
    void outlist( PNODE head )    
    {   PNODE p;    
        p = head->next;    
        while ( p != NULL )    
        {   printf("%d\n", p->data);    
            p = p->next;    
        }    
    }    
        
    void deleteneg(PNODE head)
    {
        PNODE p,temp1,temp2;         
        p = head; 
        int flag = 0;
        while ( p->next != NULL )         
        {   
        	temp1 = p -> next;
            while( temp1->data <= 0)
    		{
    			p->next = temp1->next;
    			free(temp1);
    			temp1 -> data= 2;
    			if(p ->next !=NULL)
    			temp1 = p -> next;
            }
            if(p ->next !=NULL)
            p = p -> next;
        } 
        
    }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整合了这篇文章,补全了所有的基本操作(该文中只给出了其中12种,这里提供完整的19种功能)http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html 快速排序部分参考了 http://blog.csdn.net/pinkrobin/article/details/5456094 1.初始化线性表,即置单链表的表头指针为空 2.创建线性表,此函数输入负数终止读取数据 3.打印链表链表的遍历 4.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表 5.返回单链表的长度 6.检查单链表是否为空,若为空则返回1,否则返回0 7.返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行 8.从单链表中查找具有给定值x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL 9.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 10.向单链表的表头插入一个元素 11.向单链表的末尾添加一个元素 12.向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0 13.向有序单链表中插入元素x结点,使得插入后仍然有序 14.从单链表删除表头结点,并把该结点的值返回,若删除失败则停止程序运行 15.从单链表删除表尾结点并返回它的值,若删除失败则停止程序运行 16.从单链表删除第pos个结点并返回它的值,若删除失败则停止程序运行 17.从单链表删除值为x的第一个结点,若删除成功则返回1,否则返回0 18.交换2个元素的位置 19.将线性表进行快速排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值