5.31链表

linklist.h

#ifndef __LINKLIST_H__        
#ifndef __LINKLIST_H__                                                
typedef int datatype;
typedef struct lnklst                                                      
 {                                                                          
     union                                                                  
     {                                                                      
         int len;                                                           
         datatype data;                                                     
     }msg;                                                                  
     struct lnklst *next;                                                   
 }Linklist                                                                            
 Linklist* creat_linklist(void);                                            
 void insertFront_linklist(Linklist* head, datatype num);//头插法           
 void insertBehind_linklist(Linklist* head, datatype num);//尾插法          
 void Bianli_linklist(Linklist* head);//遍历                                
 void deleteFront_Linklist(Linklist* head);//头删法                         
 void deleteBehind_Linklist(Linklist* head);//尾删法                        
 void insertWei_Linklist(Linklist* head,int n, datatype num);//按位置插入   
 #endif

linklist.c

Linklist* creat_linklist(void)                                   
 {                                                                    
Linklist* head = (Linklist*)malloc(sizeof(Linklist));            
if(NULL == head)                                                 
 {                                                                     
printf("头结点创建失败");                                         
 return NULL;                                                  
 }                                                                 
head->msg.len = 0;                                              
head->next = NULL;                                            
return head;                                                   
}
 //创建单链表                                                               
 Linklist* creat_linklist(void)                                             
 {                                                                          
     Linklist* head =(Linklist*)malloc(sizeof(Linklist));                  
     if(NULL == head)                                                       
     {                                                                      
         printf("头结点创建失败");                                          
         return NULL;                                                       
     }                                                                      
     head->msg.len = 0;                                                     
     head->next = NULL;                                                     
     return head;                                                           
 }
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a32e19846ec647ce885ffb2d29f8025c.png)
 //插入数据(头插法)            
 void insertFront_linklist(Linklist* head, datatype num)            
 {                                                                      
 Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
 if(NULL == temp)                                                   
 {                                                                      
printf("创建节点失败\n");                                  
return;                                                        
 }                                                                  
temp->msg.data = num;                                     
temp->next = NULL;                                          
temp->next = head->next;                                 
head->next = temp;                                             
head->msg.len++;                                            
return;                                                        
}
//尾插法                                                        
 void insertBehind_linklist(Linklist* head, datatype num)
 {                                                         
 Linklist* temp = (Linklist*)malloc(sizeof(Linklist));            
 if(NULL == temp)                                                 
 {                                                                    
 printf("创建节点失败\n");                                   
 return;                                                      
 }                                                                
temp->msg.data = num;                                      
temp->next = NULL;                                            
head->msg.len++;                                    
Linklist* p = head;                                            
while(p->next != NULL)                                           
{                                                                    
p = p->next;                                                 
}                                                                
p->next = temp;                                                  
return;                                                      
}
//遍历                                        
void Bianli_linklist(Linklist* head)          
{                                                 
Linklist* p = head;                           
while(p->next != NULL)                        
{                                             
p = p->next;                                  
printf("%d\t",p->msg.data);                                      
}                                             
printf("\n");                                 
return;                                   
}
//头删法                                    
void deleteFront_Linklist(Linklist* head)   
{                                                                
if(NULL == head->next)  
{                                               
printf("链表为空,头删失败");               
return ;                                
}                                           
Linklist* temp = head->next;                
head->next = temp ->next;                        
datatype num = temp->msg.data;            
free(temp);                                 
temp = NULL;                                
head->msg.len--;                            
return;                                 
}
//尾删法                                                    
 void deleteBehind_Linklist(Linklist* head)                
 {                                                                
 if(NULL == head->next)
 {                                                                
 printf("链表为空,头删失败");                             
 return;                                                  
 }                                                            
 Linklist* p = head;                                          
 while(p->next->next != NULL)                                 
 {                                                                
 p = p->next;                                             
 }                                                            
 Linklist* temp = p->next;                                    
 p->next = p->next->next;                           
 datatype num = temp->msg.data;           
 free(temp);                                                  
 temp = NULL;                          
 head->msg.len--;                                             
 return;                                                  
 }
//按位置插入                                                          
void insertWei_Linklist(Linklist* head, int n, datatype num)          
{                                                                     
    Linklist* temp = (Linklist*)malloc(sizeof(Linklist));             
                                                                      
    if(n <= 0 || n > head->msg.len+1)                                 
    {                                                                 
        printf("位置不合法");                                         
        return;                                                       
    }                                                                 
    temp->msg.data=num;                                               
    Linklist* p = head;                                               
                                                                      
    for(int i = 0;i<n-1;i++);                                         
    {                                                                 
        p = p->next;                                                  
    }                                                                 
    temp->next = p->next;                                             
    p->next = temp;                                                   
    head->msg.len++;                                                  
    return;                                                           
}
//按位置删除                                                     
void deleteWei_Linklist(Linklist* head, int n)                   
{                                                                
    if(n <= 0 || n > head->msg.len+1)                            
    {                                                            
        printf("位置不合法");                                    
        return;                                                  
    }                                                            
    Linklist* p = head;                                          
    for(int i=0;i<n-1;i++)                                       
    {                                                            
        p = p->next;                                             
    }                                                            
                                                                 
    Linklist* temp = p->next;                                    
    p->next = temp->next;                                        
                                                                 
    free(temp);                                                  
    temp = NULL;                                                 
    head->msg.len--;                                             
    return;                                                      
}

01main.c

 #include<stdio.h>
 #include"linklist.h"
 int main(int argc, const char *argv[])
 {
     Linklist* head = creat_linklist();
     
     
     insertFront_linklist(head, 100);
     insertFront_linklist(head, 200);
     insertFront_linklist(head, 300);
     Bianli_linklist(head);
 
     insertBehind_linklist(head, 500);
     insertBehind_linklist(head, 600);
     Bianli_linklist(head);
 
     deleteFront_Linklist(head);
     Bianli_linklist(head);
 
     deleteBehind_Linklist(head);
     Bianli_linklist(head);
 
     insertWei_Linklist(head,2,300);
     Bianli_linklist(head);
 
     deleteWei_Linklist(head,3);
     Bianli_linklist(head);
     return 0;
 }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值