4.2作业

      #include <stdio.h>                                                         
 #include "./lianbiao_2.h"                                                  
                                                                            
                                                                            
 int main(int argc, const char *argv[])                                     
 {                                                                          
     Linklist* head = create_linklist();                                    
     printf("head=%p len=%d next=%p\n",head,head->data.len,head->next);     
     insert_linklistHead(head,100);                                         
     insert_linklistHead(head,200);                                         
     insert_linklistHead(head,300);                                         
     insert_linklistHead(head,400);                                         
     insert_linklistHead(head,400);                                         
     insert_linklistHead(head,500);                                         
     show_linklist(head);                                                   
     insert_linklistweiHead(head,30);                                       
     show_linklist(head);                                                   
     shan_linklistHead(head);                                               
     show_linklist(head);                                                   
     charu_linklistHead(head,3,34);                                         
     show_linklist(head);                                                   
     shanchu_linklistHead(head,2);                                          
     show_linklist(head);                                                   
     chazhao_linklistHead(head,4);                                          
     show_linklist(head);                                                   
     return 0;                                                              
 }                                                                          
                                                                            
                                                                               

#include <stdio.h>                                                                                                     
#include <stdlib.h>                                                                                                    
#include "./lianbiao_2.h"                                                                                              
                                                                                                                       
                                                                                                                       
Linklist* create_linklist(void)                                                                                        
{                                                                                                                      
    Linklist* head = (Linklist*)malloc(sizeof(Linklist));                                                              
    if(NULL == head)                                                                                                   
    {                                                                                                                  
        printf("投结果申请失败,链表创建失败\n");                                                                      
        return NULL;                                                                                                   
    }                                                                                                                  
    head->data.len = 0;//头结点中链表长度要初始化为0                                                                   
    head->next = NULL;//头结点中的指针域要初始化为NULL                                                                 
    return head;                                                                                                       
}                                                                                                                      
                                                                                                                       
// 头插法插入数据                                                                                                      
                                                                                                                       
void insert_linklistHead(Linklist* head,datatype num)                                                                  
{                                                                                                                      
    //创建一个结点                                                                                                     
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));                                                                
    if(NULL == temp)                                                                                                   
    {                                                                                                                  
        printf("创建新结点失败,插入失败\n");                                                                          
        return;                                                                                                        
    }                                                                                                                  
    //将新结点初始化                                                                                                   
    temp->data.text = num;                                                                                             
    temp->next = NULL;                                                                                                 
    //将新的结点头插法插入链表                                                                                         
    temp->next = head->next;                                                                                           
    head->next = temp;                                                                                                 
    head->data.len++;                                                                                                  
    return;                                                                                                            
}                                                                                                                      
//尾插法插入数据                                                                                                       
void insert_linklistweiHead(Linklist* head,datatype wum)                                                               
{                                                                                                                      
    //创建新结点                                                                                                       
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));                                                                
    if(NULL == temp)                                                                                                   
    {                                                                                                                  
        printf("创建新结点失败,插入失败\n");                                                                          
        return;                                                                                                        
    }                                                                                                                  
    //初始化新结点                                                                                                     
    temp->data.text = wum;                                                                                             
    temp->next=NULL;                                                                                                   
    Linklist* p =head;                                                                                                 
    while(p->next != NULL)                                                                                             
    {                                                                                                                  
        p = p->next;                                                                                                   
    }                                                                                                                  
    //尾插法插入数据                                                                                                   
    temp->next = p->next;                                                                                              
    p->next = temp;                                                                                                    
    //更新头结点中链表长度                                                                                             
    head->data.len++;                                                                                                  
    return;                                                                                                            
}                                                                                                                      
                                                                                                                       
//头删法                                                                                                               
void shan_linklistHead(Linklist* head)                                                                                 
{                                                                                                                      
    if(head->next ==NULL)                                                                                              
    {                                                                                                                  
        printf("链表为空,删除失败");                                                                                  
        return (datatype)-1;                                                                                           
    }                                                                                                                  
    Linklist* p=head->next;                                                                                            
    head->next=p->next;                                                                                                
    datatype num=p->next;                                                                                              
    free(p);                                                                                                           
    p=NULL;                                                                                                            
    head->data.len--;                                                                                                  
    return num;                                                                                                        
                                                                                                                       
}                                                                                                                      
//尾删法                                                                                                               
void wieshan_linklistHead(Linklist* head)                                                                              
{                                                                                                                      
    if(NULL == head->next)                                                                                             
    {                                                                                                                  
    printf("链表为空,删除失败");                                                                                      
    return (datatype)(-1);                                                                                             
    }                                                                                                                  
    Linklist* p=head;                                                                                                  
    while(p->next->next!=NULL)                                                                                         
    {                                                                                                                  
        p=p->next;                                                                                                     
    }                                                                                                                  
    datatype num = p->next->data.text;                                                                                 
    free(p->next);                                                                                                     
    p->next=NULL;                                                                                                      
    head->data.len--;                                                                                                  
    return num;                                                                                                        
                                                                                                                       
}                                                                                                                      
                                                                                                                       
//按位置插入                                                                                                           
void charu_linklistHead(Linklist* head,int n,datatype vum)                                                             
{                                                                                                                      
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));                                                                
    if(NULL == temp)                                                                                                   
    {                                                                                                                  
        printf("创建新结点失败,插入失败\n");                                                                          
        return;                                                                                                        
    }                                                                                                                  
    temp->data.text = vum;                                                                                             
    temp->next=NULL;                                                                                                   
    Linklist* p=head;                                                                                                  
    for(int i=0;i<n-1;i++)                                                                                             
    {                                                                                                                  
        p=p->next;                                                                                                     
    }                                                                                                                  
    temp->next=p->next;                                                                                                
    p->next=temp;                                                                                                      
    head->data.len++;                                                                                                  
    return;                                                                                                            
}                                                                                                                      
//按位置删除                                                                                                           
void shanchu_linklistHead(Linklist* head,int n)                                                                        
{                                                                                                                      
    if(head->next==NULL)                                                                                               
    {                                                                                                                  
        printf("链表为空,删除失败\n");                                                                                
        return(datatype)-1;                                                                                            
    }                                                                                                                  
    Linklist* p=head;                                                                                                  
    Linklist* q=head;                                                                                                  
    for(int i=0;i<n-1;i++)                                                                                             
    {                                                                                                                  
        p=p->next;                                                                                                     
    }                                                                                                                  
    q=p->next;                                                                                                         
    p->next=q->next;                                                                                                   
    free(q);                                                                                                           
    q=NULL;                                                                                                            
    head->data.len--;                                                                                                  
    return;                                                                                                            
}                                                                                                                      
                                                                                                                       
                                                                                                                       
                                                                                                                       
//按位置查找                                                                                                           
void chazhao_linklistHead(Linklist* head,int n)                                                                        
{                                                                                                                      
    if(head->next==NULL)                                                                                               
    {                                                                                                                  
        printf("链表为空,查询失败\n");                                                                                
        return(datatype)-1;                                                                                            
    }                                                                                                                  
    Linklist* p=head;                                                                                                  
    for(int i=0;i<n;i++)                                                                                               
    {                                                                                                                  
        p=p->next;                                                                                                     
    }                                                                                                                  
    printf("%d\n",p->data.text);                                                                                       
    return;                                                                                                            
}                                                                                                                      
                                                                                                                       
                                                                                                                       
//遍历链表                                                                                                             
void show_linklist(Linklist* head)                                                                                     
{                                                                                                                      
    Linklist* p = head;                                                                                                
    while(p->next!=NULL)                                                                                               
    {                                                                                                                  
        p= p->next;                                                                                                    
        printf("%d\t",p->data.text);                                                                                   
    }                                                                                                                  
    printf("\n");                                                                                                      
    return;                                                                                                            
}                                                                                                                      

#ifndef __LINKLIST__
#define __LINKLIST__

typedef int datatype;//链表结点类型
typedef struct node{   //必须有名结构体,否则指针域类型不清楚
    union{
        datatype text;
        int len;
    }data;              //数据域,存储有效数据,使用data的text成员

    struct node *next; //指针域,存储的是下一个结点的首地址
}Linklist;


Linklist* create_linklist(void);
void insert_linklistHead(Linklist* head,datatype num);
void insert_linklistweiHead(Linklist* head,datatype wum);
void shan_linklistHead(Linklist* haed);
void charu_linklistHead(Linklist* head,int n,datatype vum);                                 
void shanchu_linklistHead(Linklist* head,int n);
void chazhao_linklistHead(Linklist* head,int n);
#endif
                                                                                            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值