数据结构第三天作业

双向链表

#include <stdio.h>                            
#include "./01_head.h"                        
#include <string.h>                           
#include <stdlib.h>                           
                                              
                                              
//创建双向链表                                
Seq* create_double_link()                     
{                                             
    Seq*head=(Seq*)malloc(sizeof(Seq));       
    memset(head,0,sizeof(Seq));               
    return head;                              
}                                             
                                              
//创建节点                                    
Seq*create_node()                             
{                                             
    Seq*temp=(Seq*)malloc(sizeof(Seq));       
    //初始化                                  
    memset(temp,0,sizeof(Seq));               
    return temp;                              
}                                             
                                              
//插入-头插                                   
void insert_link(Seq *head,int data)          
{                                             
    Seq*temp=create_node();                   
    if(temp==NULL)                            
        {                                     
            printf("节点创建失败\n");         
        }                                     
    temp->txt.data=data;                      
    temp->next=NULL;                          
    temp->prev=NULL;                          
    if(head->next==NULL)                      
    {                                         
        temp->next=NULL;                      
        head->next=temp;                      
        temp->prev=head;                      
    }                                         
    else                                      
    {                                         
        temp->next=head->next;                
        head->next=temp;                      
        temp->next->next=NULL;                
                                              
        temp->next->prev=temp;                
        temp->prev=head;                      
    }                                         
    head->txt.len++;                          
}                                             
//插入-尾插                                   
void insert_linkW(Seq*head,int data)          
{                                             
    Seq*temp=create_node();                   
     if(temp==NULL)                           
     {                                        
         printf("节点创建失败\n");            
     }                                        
    temp->txt.data=data;                      
    temp->next=NULL;                          
    temp->prev=NULL;                          
    Seq*p=head;                               
    while(p->next!=NULL)                      
    {                                         
        p=p->next;                            
    }                                         
    p->next=temp;                             
    temp->prev=p;                             
    head->txt.len++;                          
                                              
                                              
}                                             
//按位置插入                                  
void insert_link_x(Seq*head,int data,int pos) 
{                                             
    if(pos<1 || pos>head->txt.len)            
    {                                         
        printf("位置插入有误\n");             
    }                                         
    Seq*p=head;                               
    for(int i=1;i<pos;i++)                    
    {                                         
        p=p->next;                            
    }                                         
    Seq*temp=create_node();                   
    temp->txt.data=data;                      
    temp->next=p->next;                       
    p->next=temp;                             
                                              
    temp->next->prev=temp;                    
    temp->prev=p;                             
    head->txt.len++;                          
}                                             
//遍历                                        
void show(Seq*head)                           
{                                             
    if(head->next==NULL)                      
    {                                         
        printf("链表为空\n");                 
    }                                         
    Seq*p=head;                               
    while(p->next!=NULL)                      
    {                                         
        printf("%4d",p->next->txt.data);      
        p=p->next;                            
    }                                         
    printf("\n");                             
}                                             
//删除-头删                                   
void del_linkT(Seq*head)                      
{                                             
    Seq*temp=head->next;                      
    if(head->next==NULL)                      
    {                                         
        printf("链表为空\n");                 
    }                                         
    if(temp->next==NULL)                      
    {                                         
        head->next=NULL;                      
    }                                         
    else                                      
    {                                         
                                              
        head=temp->next;                      
        temp->next->prev=head;                
    }                                         
    free(temp);                               
    head->txt.len--;                          
}   
//删除-尾删
void del_linkW(Seq*head)
{
    Seq*p=head;
    if(head->next==NULL)
    {
        printf("链表为空");
    }                              
    while(p->next!=NULL)
    {
        p=p->next;
    }
    Seq*temp=p;
    p->prev->next=NULL;
    free(temp);
    head->txt.len--;
    printf("删除成功\n");
}
//中间删除
void del_link_Z(Seq*head,int pos)
{
    if(pos<1||pos>head->txt.len+1)
    {
        printf("位置错误\n");
    }
    Seq*p=head;
    for(int i=0;i<pos;i++)
    {
        p=p->next;
    }
    if(p->next==NULL)
    {
        p->prev->next=NULL;
    }
    else
    {
        p->prev->next=p->next;

        p->next->prev=p->prev;
    }
    head->txt.len--;
    free(p);
}
                                   
                                          

单向循环链表

#include <stdio.h>                          
#include <stdlib.h>                         
#include "./01_head.h"                      
//创建空单循环链表                          
Loop*create_double_link()                   
{                                           
    Loop*head=(Loop*)malloc(sizeof(Loop));  
    if(NULL==head)                          
    {                                       
        printf("创建失败!\n");             
        return NULL;                        
    }                                       
        head->txt.len=0;                    
        head->next=head;                    
        head->txt.len++;    //更新长度      
        return head;                        
                                            
}                                           
                                            
                                            
//插入数据—头插                             
void insert_linkT(Loop*head,int data)       
{                                           
    //创建第一个节点                        
    Loop*temp=(Loop*)malloc(sizeof(Loop));  
    if(NULL==temp)                          
        {                                   
            printf("创建失败\n");           
        }                                   
    temp->txt.data=data;                    
    temp->next=head->next;                  
    head->next=temp;                        
    printf("创建成功\n");                   
}                                           
                                            
//插入数据-尾插                             
void insert_linkW(Loop *head,int data)      
{                                           
    Loop *temp=(Loop*)malloc(sizeof(Loop)); 
    Loop *p=head;                           
    //初始化                                
    temp->txt.data=data;                    
    temp->next=head;                        
    if(NULL==temp)                          
    {                                       
        printf("创建失败\n");               
    }                                       
    while(p->next!=head)                    
    {                                       
        p=p->next;                          
    }                                       
                                            
    p->next=temp;                           
    head->txt.len++;                        
    printf("插入成功\n");                   
                                            
}                                           
//遍历                                      
void show(Loop *head)                       
{                                           
    Loop *p=head;                           
    while(p->next!=head)                    
    {                                       
        printf("%6d",p->next->txt.data);    
        p=p->next;                          
    }                                       
    printf("\n");                           
}                                           
                                            
//头删除                                
void del_linkT(Loop *head)              
{                                       
    //判断链表是否为空                  
    if(head->next==head)                
    {                                   
        printf("链表为空\n");           
        return ;                        
    }                                   
                                        
    Loop *temp=head->next;              
    head->next=head->next->next;        
    free(temp);                         
    printf("删除成功\n");               
                                        
}                                       
                                        
                                        
                                        
//尾删                                  
void del_linkW(Loop*head)               
{                                       
    if(head->next==head)                
    {                                   
        printf("链表为空\n");           
        return ;                        
    }                                   
    Loop *p=head;                       
    while(p->next->next!=head)          
    {                                   
        p=p->next;                      
    }                                   
    Loop*temp=p->next;                  
    p->next=head;                       
    free(temp);                         
    head->txt.len--;                    
    printf("删除成功\n");               
                                        
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值