数据结构单链表

 #include <stdio.h>                                       
 #include <stdlib.h>                                      
 #include "03_linklist.h"                                 
 /*                                                       
  * function:    //创建一个单向链表                       
  * @param [ in]                                          
  * @param [out]                                          
  * @return                                               
  */                                                      
 Linklist*  create_linklist(void)                         
 {                                                        
     Linklist *head=(Linklist*)malloc(sizeof(Linklist));  
     if(NULL==head)                                       
     {                                                    
         printf("头结点申请失败,链表创建失败\n");        
         return NULL;                                     
     }                                                    
     //头结点中链表长度要初始化为0                        
     head->data.len=0;                                    
     //头结点中的指针域要初始化为NULL                     
     head->next=NULL;                                     
     return head;                                         
 }                                                        
 /*                                                           
  * function:    //头插法插入数据                             
  * @param [ in]                                              
  * @param [out]                                              
  * @return                                                   
  */                                                          
                                                              
 void insert_linklistHead(Linklist* head,datatype num)        
 {                                                            
     //创建一个新结点                                         
     Linklist* temp=(Linklist*)malloc(sizeof(Linklist));      
     if(NULL==temp)                                           
     {                                                        
         printf("创建一个新结点失败,插入失败\n");            
         return;                                              
     }                                                        
     //将结点进行初始化                                       
     temp->data.text=num;                                     
     temp->next=NULL;                                         
                                                              
     //将新的结点头插法插入链表                               
     temp->next=head->next;                                   
     head->next=temp;                                         
                                                              
     head->data.len++;   //更新头结点中链表长度               
     return;                                                  
 }                                                            
                                                              
    /*                                     
     * function:    //遍历链表             
     * @param [ in]                        
     * @param [out]                        
     * @return                             
     */                                    
    void show_linklist(Linklist* head)     
    {                                      
        Linklist* p=head;                  
        while(p->next!=NULL)               
        {                                  
            p=p->next;                     
            printf("%d\t",p->data.text);   
        }                                  
        printf("\n");                      
        return;                            
    }                                      
                                           

/*                                                          
 * function:    //尾插法插入数据                            
 * @param [ in]                                             
 * @param [out]                                             
 * @return                                                  
 */                                                         
                                                            
void insert_linklistRear(Linklist* head,datatype num)       
{                                                           
    //创建一个新结点                                        
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));     
    if(NULL==temp)                                          
    {                                                       
        printf("创建一个新结点失败,插入失败\n");           
        return;                                             
    }                                                       
    //将结点进行初始化                                      
    temp->data.text=num;                                    
    temp->next=NULL;                                        
                                                            
    //找到尾结点                                            
    Linklist*p=head;                                        
    while(p->next!=NULL)                                    
    {                                                       
            p=p->next;                                      
    }                                                       
    //插法插入数据                                          
    temp->next=p->next;                                     
    p->next=temp;                                           
                                                            
    head->data.len++;   //更新头结点中链表长度              
    return;                                                 
}                                                           
                                                  
/*                                                
 * function:    判断链表是否为空                  
 * @param [ in]                                   
 * @param [out]                                   
 * @return      为空返回1,不为空返回0            
 */                                               
int isEmpty_linklist(Linklist*head)               
{                                                 
    return head->next==NULL?1:0;                  
}                                                 
/*                                                
 * function:    //头删法                          
 * @param [ in]                                   
 * @param [out]                                   
 * @return                                        
 */                                               
datatype  delete_linklistHead(Linklist*head)      
{                                                 
    //判断是否为空                                
    if(isEmpty_linklist(head))                    
    {                                             
        printf("链表为空,删除失败\n");           
        return (datatype)(-1);                    
    }                                             
    Linklist*p=head->next;                        
    head->next=p->next;                           
                                                  
    datatype num=p->data.text;                    
    free(p);                                      
    p=NULL;                                       
                                                  
    head->data.len--;                             
    return num;                                   
}                                                 
 
 /*                                                         
  * function:    //尾删法                                   
  * @param [ in]                                            
  * @param [out]                                            
  * @return                                                 
  */                                                        
 datatype  delete_linklistRear(Linklist*head)               
 {                                                          
     //判断是否为空                                         
     if(isEmpty_linklist(head))                             
     {                                                      
         printf("链表为空,删除失败\n");                    
         return (datatype)(-1);                             
     }                                                      
     //找到倒数第二个结点                                   
     Linklist*p=head;                                       
     while(p->next->next!=NULL)                             
     {                                                      
         p=p->next;                                         
     }                                                      
                                                            
     datatype num=p->next->data.text;                       
     free(p->next);                                         
     p->next=NULL;                                          
                                                            
     head->data.len--;                                      
     return num;                                            
 }                                                          
                                                            
                                                                                
/*                                                                        
 * function:    //按位置插入                                              
 * @param [ in]                                                           
 * @param [out]                                                           
 * @return                                                                
 */                                                                       
void insert_linklistByindex(Linklist*head,datatype num,datatype n)        
{                                                                         
    Linklist*temp=(Linklist*)malloc(sizeof(Linklist));                    
    if(NULL==temp)                                                        
    {                                                                     
        printf("创建新节点失败,插入失败\n");                             
        return;                                                           
    }                                                                     
    Linklist*p=head;                                                      
    for(int i=0;i<n-1;i++)                                                
    {                                                                     
        p=p->next;                                                        
    }                                                                     
    temp->next=p->next;                                                   
    p->next=temp;                                                         
    temp->data.text=num;                                                  
    head->data.len++;                                                     
    return;                                                               
}                                                                         
/*                                                                   
 * function:    //按位置删除                                         
 * @param [ in]                                                      
 * @param [out]                                                      
 * @return                                                           
 */                                                                  
datatype delete_linklistByindex(Linklist*head,datatype n)            
{                                                                    
    if(isEmpty_linklist(head))                                       
    {                                                                
        printf("链表为空,删除失败\n");                              
        return (datatype)-1;                                         
    }                                                                
    Linklist*p=head;                                                 
    for(int i=0;i<n-1;i++)                                           
    {                                                                
        p=p->next;                                                   
    }                                                                
    Linklist*q=p->next;                                              
    datatype num=p->next->data.text;                                 
    p->next=q->next;                                                 
    head->data.len--;                                                
    return num;                                                      
}                                                                    
                                                                     
                                                                     
                                                      
                                                  

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值