11月28号作业

题目:

 代码:

main.c

#include<stdio.h>                           
#include"linklist.h"                        
int main(int argc, const char *argv[])      
{                                           
    linklist *L=link_create();              
    if(L==NULL)                             
    {                                       
        return -1;                          
    }                                       
    list_insert_head(L,'Q');                
    list_insert_head(L,'W');                
    list_insert_head(L,'E');                
    list_insert_head(L,'R');                
    list_show(L);                           
    list_insert_tail(L,'Q');                
    list_insert_tail(L,'W');                
    list_insert_tail(L,'E');                
    list_insert_tail(L,'R');                
    list_show(L);                           
    list_insert_pos(L,9,'Z');               
    list_show(L);                           
    list_delete_head(L);                    
    list_show(L);                           
    list_delete_tail(L);                    
    list_show(L);                           
    list_delete_pos(L,1);                   
    list_show(L);                           
    list_updata_pos(L,1,'T');               
    list_show(L);                           
    //list_free(L);                         
    list_updata_value(L,'T','A');           
    list_show(L);                           
    list_reverse(L);                        
    list_show(L);                           
                                            
    return 0;                               
}                                           

linklist.c

 #include"linklist.h"                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                         
 linklist *link_create(void)                                                                                                                                                                                                                                             
 {                                                                                                                                                                                                                                                                       
     linklist *L=(linklist*)malloc(sizeof(linklist));                                                                                                                                                                                                                    
     if(NULL==L)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("创建失败\n");                                                                                                                                                                                                                                           
         return NULL;                                                                                                                                                                                                                                                    
     }                                                                                                                                                                                                                                                                   
     L->len=0;                                                                                                                                                                                                                                                           
     L->next=NULL;                                                                                                                                                                                                                                                       
     printf("创建成功\n");                                                                                                                                                                                                                                               
     return L;                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                         
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_empty(linklist *L)                                                                                                                                                                                                                                             
 {                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
     return L->next==NULL ? 1:0;                                                                                                                                                                                                                                         
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 linklist *buy_node(datatype e)                                                                                                                                                                                                                                          
 {                                                                                                                                                                                                                                                                       
     linklist *p=(linklist*)malloc(sizeof(linklist));                                                                                                                                                                                                                    
     if(p==NULL)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("空间申请失败\n");                                                                                                                                                                                                                                       
         return NULL;                                                                                                                                                                                                                                                    
     }                                                                                                                                                                                                                                                                   
     p->data=e;                                                                                                                                                                                                                                                          
     p->next=NULL;                                                                                                                                                                                                                                                       
     return p;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_insert_head(linklist *L,datatype e)                                                                                                                                                                                                                            
 {                                                                                                                                                                                                                                                                       
     if(NULL==L)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("所给链表不合法\n");                                                                                                                                                                                                                                     
         return -1;                                                                                                                                                                                                                                                      
     }                                                                                                                                                                                                                                                                   
     linklist *p=buy_node(e);                                                                                                                                                                                                                                            
     p->next=L->next;                                                                                                                                                                                                                                                    
     L->next=p;                                                                                                                                                                                                                                                          
     L->len++;                                                                                                                                                                                                                                                           
     printf("头插成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                         
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 void list_show(linklist *L)                                                                                                                                                                                                                                             
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L))                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         printf("遍历失败\n");                                                                                                                                                                                                                                           
         return;                                                                                                                                                                                                                                                         
     }                                                                                                                                                                                                                                                                   
     linklist *p=L->next;                                                                                                                                                                                                                                                
     printf("链表元素分别:");                                                                                                                                                                                                                                           
     while(p!=NULL)                                                                                                                                                                                                                                                      
     {                                                                                                                                                                                                                                                                   
         printf("%-3c",p->data);                                                                                                                                                                                                                                         
         p=p->next;                                                                                                                                                                                                                                                      
     }                                                                                                                                                                                                                                                                   
     printf("\n");                                                                                                                                                                                                                                                       
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_insert_tail(linklist *L,datatype e)                                                                                                                                                                                                                            
 {                                                                                                                                                                                                                                                                       
     if(NULL==L)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("所给链表不合法\n");                                                                                                                                                                                                                                     
         return -1;                                                                                                                                                                                                                                                      
     }                                                                                                                                                                                                                                                                   
     linklist *p=L;                                                                                                                                                                                                                                                      
     while(p->next!=NULL) p=p->next;                                                                                                                                                                                                                                     
     p->next=buy_node(e);                                                                                                                                                                                                                                                
     L->len++;                                                                                                                                                                                                                                                           
     printf("尾插成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 linklist *find_node(linklist *L,int pos)                                                                                                                                                                                                                                
 {                                                                                                                                                                                                                                                                       
     if(pos<0||pos>L->len)                                                                                                                                                                                                                                               
     {                                                                                                                                                                                                                                                                   
         printf("查找失败\n");                                                                                                                                                                                                                                           
         return NULL;                                                                                                                                                                                                                                                    
     }                                                                                                                                                                                                                                                                   
     linklist *p=L;                                                                                                                                                                                                                                                      
     for(int i=0;i<pos;i++) p=p->next;                                                                                                                                                                                                                                   
     return p;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_insert_pos(linklist *L,int pos,datatype e)                                                                                                                                                                                                                     
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||pos<0||pos>(L->len+1))                                                                                                                                                                                                                                  
     {                                                                                                                                                                                                                                                                   
         printf("插入失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *p=buy_node(e);                                                                                                                                                                                                                                            
     if(NULL==p)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("节点申请失败\n");                                                                                                                                                                                                                                       
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *q=find_node(L,pos-1);                                                                                                                                                                                                                                     
     if(q==NULL)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         printf("查找前驱节点失败\n");                                                                                                                                                                                                                                   
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     p->next=q->next;                                                                                                                                                                                                                                                    
     q->next=p;                                                                                                                                                                                                                                                          
     L->len++;                                                                                                                                                                                                                                                           
     printf("插入成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_delete_head(linklist *L)                                                                                                                                                                                                                                       
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L))                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         printf("头删失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *p=L->next;                                                                                                                                                                                                                                                
     L->next=p->next;                                                                                                                                                                                                                                                    
     free(p);                                                                                                                                                                                                                                                            
     p=NULL;                                                                                                                                                                                                                                                             
     L->len--;                                                                                                                                                                                                                                                           
     printf("头删成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_delete_tail(linklist *L)                                                                                                                                                                                                                                       
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L))                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         printf("尾删失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *p=L;                                                                                                                                                                                                                                                      
     while(p->next->next!=NULL) p=p->next;                                                                                                                                                                                                                               
     free(p->next);                                                                                                                                                                                                                                                      
     p->next=NULL;                                                                                                                                                                                                                                                       
     L->len--;                                                                                                                                                                                                                                                           
     printf("尾删成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_delete_pos(linklist *L,int pos)                                                                                                                                                                                                                                
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L)||pos<1||pos>L->len)                                                                                                                                                                                                                       
     {                                                                                                                                                                                                                                                                   
         printf("删除失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *q=find_node(L,pos-1);                                                                                                                                                                                                                                     
     linklist *p=q->next;                                                                                                                                                                                                                                                
     q->next=p->next;                                                                                                                                                                                                                                                    
     free(p);                                                                                                                                                                                                                                                            
     p=NULL;                                                                                                                                                                                                                                                             
     L->len--;                                                                                                                                                                                                                                                           
     printf("删除成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 int list_updata_pos(linklist *L,int pos,datatype e)                                                                                                                                                                                                                     
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L)||pos<1||pos>L->len)                                                                                                                                                                                                                       
     {                                                                                                                                                                                                                                                                   
         printf("修改失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *p=find_node(L,pos);                                                                                                                                                                                                                                       
     p->data=e;                                                                                                                                                                                                                                                          
     printf("修改成功\n");                                                                                                                                                                                                                                               
     return 1;                                                                                                                                                                                                                                                           
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
 linklist *list_search_value(linklist *L,datatype e)                                                                                                                                                                                                                     
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||list_empty(L))                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         puts("查找失败\n");                                                                                                                                                                                                                                             
         return NULL;                                                                                                                                                                                                                                                    
     }                                                                                                                                                                                                                                                                   
     linklist *p=L->next;                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                         
     for(int i=1;i<=L->len;i++)                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         if(p->data==e) return p;                                                                                                                                                                                                                                        
         p=p->next;                                                                                                                                                                                                                                                      
     }                                                                                                                                                                                                                                                                   
     return NULL;                                                                                                                                                                                                                                                        
 }                                                                                                                                                                                                                                                                       
 int list_updata_value(linklist *L,datatype old_e,datatype new_e)                                                                                                                                                                                                        
 {                                                                                                                                                                                                                                                                       
     if(L==NULL||L->next==NULL)                                                                                                                                                                                                                                          
     {                                                                                                                                                                                                                                                                   
         printf("修改失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     linklist *p=list_search_value(L,old_e);                                                                                                                                                                                                                             
     if(p!=NULL)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         p->data=new_e;                                                                                                                                                                                                                                                  
         printf("修改成功\n");                                                                                                                                                                                                                                           
         return 1;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
     else                                                                                                                                                                                                                                                                
     {                                                                                                                                                                                                                                                                   
         printf("修改失败\n");                                                                                                                                                                                                                                           
         return 0;                                                                                                                                                                                                                                                       
     }                                                                                                                                                                                                                                                                   
 }                                                                                                                                                                                                                                                                       
 void list_free(linklist *L)                                                                                                                                                                                                                                             
 {                                                                                                                                                                                                                                                                       
     if(L!=NULL)                                                                                                                                                                                                                                                         
     {                                                                                                                                                                                                                                                                   
         while(L->next!=NULL) list_delete_head(L);                                                                                                                                                                                                                       
         free(L);                                                                                                                                                                                                                                                        
         L=NULL;                                                                                                                                                                                                                                                         
         printf("释放成功\n");                                                                                                                                                                                                                                           
     }                                                                                                                                                                                                                                                                   
 }                                                                                                                                                                                                                                                                       
 void list_reverse(linklist *L)                                                                                                                                                                                                                                          
 {                                                                                                                                                                                                                                                                       
     linklist *p=link_create();                                                                                                                                                                                                                                          
     p->next=L->next;                                                                                                                                                                                                                                                    
     L->next=NULL;                                                                                                                                                                                                                                                       
     while(p->next!=NULL)                                                                                                                                                                                                                                                
     {                                                                                                                                                                                                                                                                   
         list_insert_head(L,p->next->data);                                                                                                                                                                                                                              
         list_delete_head(p);                                                                                                                                                                                                                                            
     }                                                                                                                                                                                                                                                                   
     list_free(p);                                                                                                                                                                                                                                                       
 }                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                         

linklist.h

 #ifndef __LINKLIST_H__
 #define __LINKLIST_H__
 
 #include<stdio.h>
 #include<stdlib.h>
 
 typedef char datatype;
 typedef struct node
 {
     union
     {
         int len;
         datatype data;
     };
     struct node *next;
 }linklist;
 
 linklist *link_create(void);
 int list_empty(linklist *L);
 linklist *buy_node(datatype e);
 int list_insert_head(linklist *L,datatype e);
 void list_show(linklist *L);
 int list_insert_tail(linklist *L,datatype e);
 linklist *find_node(linklist *L,int pos);
 int list_insert_pos(linklist *L,int pos,datatype e);
 int list_delete_head(linklist *L);
 int list_delete_tail(linklist *L);                                                                                                                                                                                      
 int list_delete_pos(linklist *L,int pos);
 int list_updata_pos(linklist *L,int pos,datatype e);
 linklist *list_search_value(linklist *L,datatype e);
 void list_free(linklist *L);
 int list_updata_value(linklist *L,datatype old_e,datatype new_e);
 void list_reverse(linklist *L);
  
 #endif                                                                                                                                                                                                                                                                                                                                                  

运行结果:

结果一:
ubuntu@ubuntu:11.25$ ./a.out
创建成功
头插成功
头插成功
头插成功
头插成功
链表元素分别:R  E  W  Q  
尾插成功
尾插成功
尾插成功
尾插成功
链表元素分别:R  E  W  Q  Q  W  E  R  
插入成功
链表元素分别:R  E  W  Q  Q  W  E  R  Z  
头删成功
链表元素分别:E  W  Q  Q  W  E  R  Z  
尾删成功
链表元素分别:E  W  Q  Q  W  E  R  
删除成功
链表元素分别:W  Q  Q  W  E  R  
修改成功
链表元素分别:T  Q  Q  W  E  R  
修改成功
链表元素分别:A  Q  Q  W  E  R  

结果二:
ubuntu@ubuntu:11.25$ ./a.out
创建成功
头插成功
头插成功
头插成功
头插成功
链表元素分别:R  E  W  Q  
尾插成功
尾插成功
尾插成功
尾插成功
链表元素分别:R  E  W  Q  Q  W  E  R  
插入成功
链表元素分别:R  E  W  Q  Q  W  E  R  Z  
头删成功
链表元素分别:E  W  Q  Q  W  E  R  Z  
尾删成功
链表元素分别:E  W  Q  Q  W  E  R  
删除成功
链表元素分别:W  Q  Q  W  E  R  
修改成功
链表元素分别:T  Q  Q  W  E  R  
修改成功
链表元素分别:A  Q  Q  W  E  R  
创建成功
头插成功
头删成功
头插成功
头删成功
头插成功
头删成功
头插成功
头删成功
头插成功
头删成功
头插成功
头删成功
释放成功
链表元素分别:R  E  W  Q  Q  A  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值