24/8/1链表作业

主函数:

 #include <stdio.h>                                  
 #include "create.h"                                 
                                                     
 int main(int argc, const char *argv[])              
 {                                                   
     li_t *head;                                     
                                                     
     head = CreateList();                            
     printf("头插1到9:\n");                          
     datatype n = 9;                                 
     while(n){                                       
         HeadInsert(head,n);                         
         n--;                                        
     }                                               
     DisplayList(head);                              
     printf("头删\n");                               
     HeadDelete(head);                               
     DisplayList(head);                              
     printf("尾插一个12\n");                         
     LastInsert(head,12);                            
     DisplayList(head);                              
     printf("尾删\n");                               
     LastDelete(head);                               
     DisplayList(head);                              
     printf("在第四个位置插入55\n");                 
     InsertList(head,4,55);                          
     DisplayList(head);                              
     printf("删除第四个位置元素\n");                 
     DeleteList(head,4);                             
     DisplayList(head);                              
                                                     
     li_t* list;                                     
     list = CreateList();                            
                                                     
     printf("直接插入排序,依次输入:3,2,5,9,6,5\n"); 
     Insert(list,3);                                 
     Insert(list,2);                                 
     Insert(list,5);                                 
     Insert(list,9);                                 
     Insert(list,6);                                 
     Insert(list,5);                                 
     DisplayList(list);                              
     return 0;                                       
 }                                                   

功能函数:

#include <stdio.h>                              
#include <stdlib.h>                             
#include <string.h>                             
#include "create.h"                             
li_t* CreateList(void){                         
    li_t *head = malloc(sizeof(li_t));          
    if(NULL == head){                           
        printf("创建链表失败");                 
        return NULL;                            
    }                                           
    head->next = NULL;                          
    head->msg.len = 0;                          
    return head;                                
}                                               
//头插法                                        
void HeadInsert(li_t* head,datatype num){       
    //创建新结点                                
    li_t* temp =(li_t*) malloc(sizeof(li_t));   
    if(NULL == temp){                           
        printf("头插法创建结点失败");           
        return;                                 
    }                                           
    temp->msg.data = num;                       
    temp->next = NULL;                          
    temp->next = head->next;                    
    head->next = temp;                          
    head->msg.len++;                            
    return ;                                    
}                                               
                                                
void DisplayList(li_t* head){                   
    if(NULL == head){                           
        return;                                 
    }                                           
    li_t *p = head;                             
    for(; p->next !=NULL ;){                    
        p = p->next;                            
        printf("%d ",p->msg.data);              
    }                                           
    putchar(10);                                
    return;                                     
}                                               
//头删                                                
void HeadDelete(li_t *head){                          
    if(NULL == head->next){                           
        return;                                       
    }                                                 
    li_t* temp = head->next;                          
    head->next = temp->next;                          
    free(temp);                                       
    temp = NULL;                                      
    head->msg.len--;                                  
    return;                                           
}                                                     
//尾插                                                
void LastInsert(li_t* head,datatype num){             
    li_t* temp = (li_t*) malloc(sizeof(li_t));        
    if(NULL == temp){                                 
        return;                                       
    }                                                 
    //找尾结点                                        
    li_t* p = head;                                   
    while(p->next != NULL){                           
        p = p->next;                                  
    }                                                 
    temp->msg.data = num;                             
    temp->next = NULL;                                
    p->next = temp;                                   
    head->msg.len++;                                  
    return;                                           
}                                                     
//尾删                                                
void LastDelete(li_t* head){                          
    if(NULL == head->next)                            
        return;                                       
    li_t* p = head;                                   
    if(p->next == head)                               
        return;                                       
    while(p->next->next != NULL)                      
        p = p->next;                                  
    free(p->next);                                    
    p->next = NULL;                                   
    head->msg.len--;                                  
    return;                                           
}                                                     
//按位置插入                                             
void InsertList(li_t* head,int local,datatype num){      
    li_t* temp = (li_t*)malloc(sizeof(li_t));            
    if(NULL == temp){                                    
        return;                                          
    }                                                    
    if(local<0 || local > head->msg.len){                
        printf("插入位置不合法");                        
        return;                                          
    }                                                    
    temp->msg.data = num;                                
    temp->next = NULL;                                   
    int con = 0;                                         
    li_t* p = head;
    if(1 == local){
        temp->next = head->next;
        head->next = temp;
    } 
    else{                                     
        while(1){                                            
            p = p->next;                                     
            con++;                                           
            if(con == local-1){                              
                temp->next = p->next;                        
                p->next=temp;                                
                break;                                       
            }                                                
        }  
    }                                                  
    head->msg.len++;                                     
    return;                                              
}                                                        
//按位置删除                                             
void DeleteList(li_t* head,int local){                   
    if(NULL == head->next)                               
        return;                                          
    if(local < 0 || local > head->msg.len)               
        return;                                          
    int con = 0;                                         
    li_t* p = head;                                      
    
    if(local == 1){                   
        li_t* temp = p->next;         
        head->next = temp->next;      
        free(temp);                   
    }
    else{                            
        while(1){                     
            p = p->next;              
            con++;                    
            if(con == local-1){       
                li_t* temp;           
                temp = p->next;       
                p->next = temp->next; 
                free(temp);           
                break;                
            }                         
        }                             
    }                                 
                                             
    head->msg.len--;                                  
    return ;                                          
 }                                                     
 //直接插入排序                                        
 void Insert(li_t* head,datatype num){                 
     li_t* temp = malloc(sizeof(li_t));                
     if(NULL == temp){                                 
         printf("创建失败");                           
         return;                                       
     }                                                 
     temp->msg.data = num;                             
     temp->next = NULL;                                
     li_t* p = head;                                   
     if(NULL== head->next){                            
         temp->next = head->next;                      
         head->next = temp;                            
     }else{                                            
         p = p->next;                                  
         if(num < p->msg.data){                        
             temp->next = head->next;                  
             head->next = temp;                        
         }else{                                        
             while(1){                                 
                 if(NULL == p->next){                  
                     temp->next = p->next;             
                     p->next = temp;                   
                     break;                            
                 }                                     
                 else if(num <= p->next->msg.data){    
                     temp->next = p->next;             
                     p->next = temp;                   
                     break;                            
                 }                                     
                 else{                                 
                     p = p->next;                      
                 }                                     
             }                                         
         }                                             
     }                                                 
    head->msg.data++;   
    return;             
}                       
                                                      

 #ifndef __createlist__
 #define __createlist__
 
 typedef int datatype;
 typedef struct list{
     union {
         datatype data;
         int len;
     } msg;
     struct list *next;
 } li_t;
 
 
 li_t* CreateList(void);
 
 void HeadInsert(li_t* head,datatype num);
 void DisplayList(li_t* head);
 void HeadDelete(li_t *head);
 void LastInsert(li_t* head,datatype num);
 void LastDelete(li_t* head);
 void InsertList(li_t* head,int local,datatype num);
 void DeleteList(li_t* head,int local);
 void Insert(li_t* head,datatype num);
 
 
 #endif                                               
                                                      

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值